它能在64位平台上运行吗?
本文关键字:运行 平台 64位 | 更新日期: 2023-09-27 17:54:13
var guidComPorts = Guid.Empty;
UInt32 dwSize;
IntPtr hDeviceInfo;
var buffer = new byte[512];
var providerName = new[] { };
var spddDeviceInfo = new SpDevinfoData();
var bStatus = SetupDiClassGuidsFromName("Ports", ref guidComPorts, 1, out dwSize);
if (bStatus)
{
hDeviceInfo = SetupDiGetClassDevs(
ref guidComPorts,
(IntPtr)null,
(IntPtr)null,
DigcfPresent | DigcfProfile);
if (hDeviceInfo.ToInt32() != 0)
{
while (true)
{
spddDeviceInfo.CbSize = Marshal.SizeOf(spddDeviceInfo);// IS IT THIS LINE WORK FOR 64 BIT
bStatus = SetupDiEnumDeviceInfo(hDeviceInfo, nDevice++, ref spddDeviceInfo);
break;
}
}
return;
}
}
不,这不是64位安全的。虽然您的hDeviceInfo
被正确地定义为IntPtr
,但在比较它时,您将其视为32位值。
同样,您也不想与IntPtr.Zero
进行比较。SetupDiGetClassDevs失败时返回INVALID_HANDLE_VALUE
。INVALID_HANDLE_VALUE
为-1。您必须比较值的所有64位,以确定函数是否失败。如果您尝试这样做:
if (hDeviceInfo.ToInt32() != -1)
如果返回值类似于0x100000001,则可能出现错误。
你最好的选择是使用SafeHandle而不是IntPtr
。