C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
2017-08-30 18:49
267 查看
C#调用外部DLL,把带有中文字符的文件路径传递给DLL变量时,出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误。
如图:
文件路径:
错误代码如下:
经过调试发现原因是:该文件路径(字符串变量)的文件名比较特殊(.hdf和.tif都是文件格式,并且在此文件名中同时出现),因此无法传递给DLL变量。
解决方法为:把该字符串变量转换为字节变量,在DLL程序中再把接收到的字节变量转换为字符串变量。
C#中修改后代码:
IDL程序中修改后代码:
总结:调用外部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程序时,有些变量比较特殊,会导致错误,可以尝试转换类型来解决。
相关文章推荐
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#调用c++的dll报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏“
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C# 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。
- vs.net 2005 C# WinForm GroupBOX 的BUG?尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C#:AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。解决办法收集
- C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- c#.net 访问SQL SERVER 时提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
- C# 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。