[DllImport("iphlpapi.dll")]
private static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, bool bOrder);
我正在使用此dll并将函数调用为
GetTcpTable(IntPtr.Zero, ref iBytes, false)
它在Windows 7 32位操作系统上运行正常,但在64位OS中无法运行。我如何使其在Windows 7 64位操作系统上运行?
最佳答案
看来问题出在您的签名上:
private static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, bool bOrder);
查看documentation,它显示以下内容:
public static extern int GetTcpTable(byte[] pTcpTable, out int pdwSize, bool bOrder);
您正在使用IntPtr,但是它应该是一个缓冲区,它将被MIB_TCPTABLE结构填充。
我尝试查找引用实现所有这些方法的正确方法的文章,但并没有找到很多。我对pinvoke.net甚至没有列出GetTcpTable或我上面提到的结构感到震惊。
编辑:
您可能想看看
GetExtendedTcpTable()
我还发现Vista中引入了GetTcpTable2()。它包含相同的签名,所以也许看看是否调用它可以使它神奇地在x64上运行,因为您当前的调用应该可以在x86上运行。它可能无法100%即开即用地工作,但是我很好奇它能否使您走得更远或至少获得不同的结果。