在用C#编写的目标平台.NET 3.5的DLL中,我将使用CMP_WaitNoPendingInstallEvents非托管函数。如文档中所述,此方法返回 winbase.h 文件中定义的WAIT_OBJECT_0
,WAIT_TIMEOUT
和WAIT_FAILED
值。我需要从C#中检查这个返回值并采取行动。
如何将返回值与C#中 winbase.h 中定义的常量进行比较?
答案 0 :(得分:1)
#define STATUS_WAIT_0 ((DWORD)0x00000000L)
在winbase.h中
#define WAIT_OBJECT_0 ((STATUS_WAIT_0 ) + 0 )
#define WAIT_FAILED ((DWORD)0xFFFFFFFF)
和winerror.h
#define WAIT_TIMEOUT 258L // dderror
您应该自己定义这些常量。要直接在windows头文件中使用常量,你可以实现一个C ++静态库来返回它们的值,但这没有用,因为它会产生相同的结果,因为无论如何都会内联常量值。
[DllImport("cfgmgr32.dll", SetLastError = true, EntryPoint = "CMP_WaitNoPendingInstallEvents", CharSet = CharSet.Auto)]
public static extern uint CMP_WaitNoPendingInstallEvents(uint TimeOut);
private const uint WAIT_OBJECT_0 = 0x0;
private const uint WAIT_TIMEOUT = 0x102;
private const uint WAIT_FAILED = 0xFFFFFFFF;
那应该是PInvoke:
uint result = CMP_WaitNoPendingInstallEvents(1000);
switch (result)
{
case WAIT_OBJECT_0:
break;
case WAIT_TIMEOUT:
break;
case WAIT_FAILED:
break;
}