我想在C#相当于写入以下内容:如何通过Pinvoke将指针传递给结构?
typedef struct BATT_ID
{
UINT8 nBattID[8];
} BATT_ID, *PBATT_ID;
HANDLE g_hDevice;
// Connect to the driver
g_hDevice = CreateFile(L"BAT1:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
void GetBattID(PBATT_ID pBattId)
{
// ... snipped code to check g_hDevice is valid ...
DeviceIoControl(g_hDevice, SOMO650_PWR_GET_BATT_ID, NULL, 0, pBattId, sizeof(BATT_ID), dwByteReturn, NULL))
}
// once BATT_ID has been filled it can be formatted as follows
wsprintf(strInfo, TEXT("%02X:%02X:%02X:%02X:%02X:%02X"), BattID.nBattID[6], BattID.nBattID[5], BattID.nBattID[4], BattID.nBattID[3], BattID.nBattID[2], BattID.nBattID[1]);
的代码连接到Windows Mobile设备的功率驱动器,并试图找回的电池ID。
这是SoMo650和Socket的最新ROM版本只能在C.提供的示例代码
我可以成功所做的一切(是最好的,我可以告诉)除了呼吁DeviceIoControl的,因为我不知道如何将BATT_ID结构转换为C#。
我猜测,因为它是一个结构和DeviceIoControl期望一个指针,我应该看着Marshal.PtrToStructure(),但我有很少的C经验,感觉非常深刻。
任何援助将不胜感激。
SDF提供的电池相关功能是GetSystemPowerStatusEx2上的一个包装。我试图获得的信息只能从设备驱动程序中获得。 – 2010-02-12 15:21:13
@Matt:好的,看看编辑的答案我希望我有正确的方式.... :) – t0mm13b 2010-02-12 15:31:51
你的结构是不正确的 - 原始定义是8 UINT8's,它只是8个字节。也不需要把它包装在一个结构中(即使它是8个整数)。 – ctacke 2010-02-12 15:49:39