加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Windows 7 64位中使用[DllImport(“iphlpapi.dll”)]

发布时间:2020-12-15 21:51:31 所属栏目:百科 来源:网络整理
导读:[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位操作
[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,bool bOrder);

看看documentation,它显示以下内容:

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

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

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

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

> MSDN Documentation
> PInvoke Documentation

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读