[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 位操作系统中运行?
最佳答案
看起来问题出在您的签名上:
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()
我还发现有一个GetTcpTable2()这是在 Vista 中引入的。它包含相同的签名,所以也许只是看看是否调用它而不是让它在 x64 上神奇地工作,因为你当前的调用应该在 x86 上工作。它可能无法 100% 开箱即用,但我很好奇它是否能让你走得更远或至少得到不同的结果。
关于c# - 在 Windows 7 64 位中使用 [DllImport ("iphlpapi.dll")],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747484/