5
 [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 位操作系统中运行?

4

1 回答 1

2

看起来问题出在您的签名上:

private static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, bool bOrder);

查看文档,它显示以下内容:

public static extern int GetTcpTable(byte[] pTcpTable, out int pdwSize, bool bOrder);

您正在使用 IntPtr,但它应该是一个将填充MIB_TCPTABLE结构的缓冲区。

我尝试查找引用正确方法来实现所有这些的文章,但没有找到很多。我很震惊 pinvoke.net 甚至没有列出 GetTcpTable 也没有列出我上面提到的结构。

编辑: 你可能想看看GetExtendedTcpTable()

我还发现在 Vista 中引入了一个GetTcpTable2() 。它包含相同的签名,所以也许只是看看调用它是否让它在 x64 上神奇地工作,因为你当前的调用应该在 x86 上工作。它可能无法 100% 开箱即用,但我很好奇它是否能让你走得更远或至少得到不同的结果。

于 2013-05-25T09:44:26.007 回答