【发布时间】:2009-06-28 11:29:08
【问题描述】:
这次我遇到了一个错误,我一直在尝试找出它存在的原因。虽然错误可以忽略,但我想知道它为什么会出现在第一位。
result = SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref anInterface, IntPtr.Zero, 0, ref buffersize, IntPtr.Zero);
if (!result)
{
int errCode = Marshal.GetLastWin32Error();
errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
statusLabel.Text += "\n(1)SetupDiGetDeviceInterfaceDetail Error: " + errCode + " => " + errorMessage + ".";
//break;
}
这是对这个函数的第一次调用,只是为了设置 buffersize 变量以便第二次调用该函数。我收到打印的错误消息:122 => 传递给系统调用的数据区域太小。 从错误消息来看,我认为这一定与第二个参数(ref anInterface)有关,我可以在第二次传递时忽略它,结果证明是真的;但错误仍然存在,我想知道为什么在它回来咬我之前在“后面”的地方。 有问题的参数是这样声明和定义的:
[StructLayout(LayoutKind.Sequential)] // defined here
public struct SP_DEVICE_INTERFACE_DATA
{
public uint cbSize;
public Guid InterfaceClassGuid;
public uint Flags;
public IntPtr Reserved;
}
anInterface = new SP_DEVICE_INTERFACE_DATA(); // declared here
anInterface.cbSize = (uint)Marshal.SizeOf(anInterface);
anInterface.InterfaceClassGuid = Guid.Empty;
anInterface.Reserved = IntPtr.Zero;
anInterface.Flags = 0;
我已将 msdn 文章拆开,据我所知,这里的代码没有任何问题。
【问题讨论】: