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程序时,有些变量比较特殊,会导致错误,可以尝试转换类型来解决。