CeGetSystemInfo不补按引用传递的结构
-
19-09-2019 - |
题
我试图获取有关从桌面应用程序(C#编写)在Windows Mobile设备的信息。 我搜索MSDN,发现我需要的功能是在文件Rapi.dll:
VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);
参数是一个指向其deffined这样一个结构:
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;
下面是我这一切是如何映射到托管代码:
[DllImport("rapi.dll")]
public static extern void CeGetSystemInfo([MarshalAs(UnmanagedType.Struct)]ref SYSTEM_INFO info);
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
internal PROCESSOR_INFO_UNION uProcessorInfo;
public uint dwPageSize;
public IntPtr lpMinimumApplicationAddress;
public IntPtr lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public ushort wProcessorLevel;
public ushort wProcessorRevision;
}
[StructLayout(LayoutKind.Explicit)]
public struct PROCESSOR_INFO_UNION
{
[FieldOffset(0)]
internal uint dwOemId;
[FieldOffset(1)]
internal ushort wProcessorArchitecture;
[FieldOffset(2)]
internal ushort wReserved;
}
当我打电话传递SYSTEM_INFO结构没有任何反应的功能。该功能不会以任何方式改变该结构的值。我有没有映射结构错了什么?
在预先感谢
解决方案
知道了!
在文件Rapi.dll需要初始化通过调用CeRapiInit功能,然后毕竟你的函数调用需要通过调用CeRapiUinit关闭RAPI
不隶属于 StackOverflow