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 签名的调用约定和参数与非托管的目标签名是否匹配。

...全文
48 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过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);
则出现这个错误:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2012-10-07 11:16
社区公告

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