【发布时间】:2015-09-15 10:52:02
【问题描述】:
在 C# 程序中,我实现了以下功能:
int Test();
在程序(用 C++ 编写)的本机部分中定义如下:
HRESULT Test();
或者可能:
DWORD Test();
因此,在实现功能时,我需要从 C# 部分返回 HRESULT 和其他标准 Windows 代码。目前我已经实现如下:
public int Test()
{
return 0x00000102; // WAIT_TIMEOUT
}
问题是如何在 C# 中使用人类可读的代码?我想写类似:return WAIT_TIMEOUT; 的东西,就像我在 C++ 中写的一样。
我正在寻找一种不需要下载外部库或类似内容的解决方案。仅标准 .NET。
顺便说一句,WAIT_TIMEOUT 不是HRESULT,但我希望你能理解这个问题——问题不是关于特殊情况,而是关于标准 Windows 常量。我只是想使用 C# 中的标准 Windows 定义(E_NOTIMPL、WAIT_OBJECT_0、S_FALSE 等)
【问题讨论】:
-
使用枚举或常量。
-
C++函数
HRESULT Test一般对应C#void Test,有一个例外。它确实取决于指定的合同,但在没有其他文档的情况下,C++ 方面的合同是失败是由否定的HRESULT传达的。而在 C# 中,该失败是通过异常传达的。 -
@thefiloe,我很高兴使用它们,但我在 C# 中找不到它们。我应该手动定义每个常量吗?我认为微软已经为 .NET 完成了这项工作。
-
我稍微修改了这个问题。我正在尝试找到一种方法(适用于这两种情况)来使用 PSDK 标头中已经存在的所有这些定义。在 C# 中可以吗?
-
@Cheers:
S_FALSE使用频率很高。所有IEnumXxx接口(如IEnumString)都将其用作哨兵,报告已到达受控序列的末尾(例如,参见IEnumString::Next)。