您的位置:首页 > 编程语言 > C#

C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

2017-08-30 18:49 267 查看
C#调用外部DLL,把带有中文字符的文件路径传递给DLL变量时,出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误。

如图:



文件路径:



错误代码如下:

//定义赋值IDL下的变量
oComIDL.SetIDLVariable("infile", inFilePath);  //输入文件inFilePath赋值给IDL中的变量infile


经过调试发现原因是:该文件路径(字符串变量)的文件名比较特殊(.hdf和.tif都是文件格式,并且在此文件名中同时出现),因此无法传递给DLL变量。

解决方法为:把该字符串变量转换为字节变量,在DLL程序中再把接收到的字节变量转换为字符串变量。

C#中修改后代码:

byte[] byteFile = System.Text.Encoding.Default.GetBytes(inFilePath);  //字符串转为字节型

//定义赋值IDL下的变量
oComIDL.SetIDLVariable("infile", byteFile);  //输入文件inFilePath赋值给IDL中的变量infile


IDL程序中修改后代码:

infile = string(infile)  ;字节型转为字符串


总结:调用外部DLL程序时,有些变量比较特殊,会导致错误,可以尝试转换类型来解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐