C#动态库调用时提示: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

dailongzhen dailongzhen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这是一个动态库调用函数:
MIBDLL_API  int _stdcall mibdecode(char* array);


下面是在C#中对其调用:
 [DllImport("MibDll.dll", EntryPoint = "?mibdecode@@YGHPAD@Z")]
public static extern int mibdecode(string array);

private void button1_Click(object sender, EventArgs e)
{
string str,array;
str = textBox1.Text;
string[] substr = str.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries);
byte[] data = new byte[substr.Length];
for (int i = 0; i < substr.Length; i++)
{
data[i] = Convert.ToByte(substr[i], 16);

}
//string array = BitConverter.ToString(data);
//array = Encoding.Default.GetString(data);//************
array = Encoding.Unicode .GetString(data);
//textBox2.Text = array;
mibdecode(array);

}

当我使用“array = Encoding.Default.GetString(data);”(注有//**********”)时,程序能够正常调用,但编码结果与C/C++中不一样,于是我使用 “array = Encoding.Unicode .GetString(data);”,虽然编码结果一样了,但是在调用“mibdecode(array);”时,却提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。这是什么原因啊?求解!
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
dailongzhen
C语言 70,039 成员 243,237 内容