C# winpcap_4_0_2 api 函数PacketGetAdapterNames调用出错

关於 2012-10-07 11:16:21
这段代码是在网上找来的,但别人应该没有出现跟我一样的错误,帮忙看看为什么出这个错吧。


[DllImport("packet.dll", EntryPoint = "PacketGetAdapterNames", CharSet = CharSet.Ansi)]
public static extern bool PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, ref int BufferSize);

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
bool b = false;
int length = 40;
string an = new string('0', length);
b = PacketGetAdapterNames(an, ref length);
//NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces();
label1.Text = an;
}

错误:对 PInvoke 函数“Winpacp!Winpacp.Form1::PacketGetAdapterNames”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
关於 2012-10-07
  • 打赏
  • 举报
回复
谁知道为什么啊。
关於 2012-10-07
  • 打赏
  • 举报
回复
哎 自己试了下
在.net 4.0里会有这样的问题
在.net 2.0里正常。
不知道为什么。
关於 2012-10-07
  • 打赏
  • 举报
回复
如果把函数改成这样 去掉了ref
PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, int BufferSize);
则出现这个错误:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧