[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位操作系统中无法工作。如何在Windows 7 64位操作系统中使其工作?
答案 0 :(得分:2)
看起来问题出在您的签名上:
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%开箱即用,但我很好奇它是否会让你更远或至少有不同的结果。