这段代码是在网上找来的,但别人应该没有出现跟我一样的错误,帮忙看看为什么出这个错吧。
[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 签名的调用约定和参数与非托管的目标签名是否匹配。
[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 签名的调用约定和参数与非托管的目标签名是否匹配。
PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, int BufferSize);
则出现这个错误:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在.net 4.0里会有这样的问题
在.net 2.0里正常。
不知道为什么。