C#读取C++编写的DLL时遇到的一个问题
2012-10-30 09:36
573 查看
最近在做一个C#项目,要调用一个C++编写的DLL,结果出了点问题,现将问题及解决方法记录如下:
问题描述:
1、DLL函数描述:
int hex_a(unsigned char *hex,char *a,unsigned char length);
功能: 将16 进制数转换为ASCII 字符。
参数:
hex: 16 进制数
a: 输出的ASCII 字符
length: 16 进制数的长度
返回: =0 成功
<>0 失败
2、我的引入:
[DllImport("F:\\C++\\intellectDFIPublish121023\\dll\\mwrf32.dll", EntryPoint = "hex_a",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int16 hex_a(Byte hex, ref Byte asc, Int16 len);
3、报错:
4、解决过程:
上网上查了一下,有其他博主有过一些总结,说可能导致这个错误的可能原因有很多,然后我找了找,没结果,最后查到一篇相当的文章(/article/7152830.html),我将导入改为:
[DllImport("F:\\C++\\intellectDFIPublish121023\\dll\\mwrf32.dll", EntryPoint = "hex_a",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int16 hex_a(ref Byte hex, ref Byte asc, Int16 len);
问题解决了,我想了想原因,主要是我觉得参数hex并不需要返回值,所以不需要ref,而asc需要返回值,就用了ref,结果就出错了,看来对ref的理解还不够呀,原来作为引用传值还起着类似指针的作用,需要牢记!
问题描述:
1、DLL函数描述:
int hex_a(unsigned char *hex,char *a,unsigned char length);
功能: 将16 进制数转换为ASCII 字符。
参数:
hex: 16 进制数
a: 输出的ASCII 字符
length: 16 进制数的长度
返回: =0 成功
<>0 失败
2、我的引入:
[DllImport("F:\\C++\\intellectDFIPublish121023\\dll\\mwrf32.dll", EntryPoint = "hex_a",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int16 hex_a(Byte hex, ref Byte asc, Int16 len);
3、报错:
"尝试读取或写入受保护的内存。这通常指示其他内存已损坏"
4、解决过程:上网上查了一下,有其他博主有过一些总结,说可能导致这个错误的可能原因有很多,然后我找了找,没结果,最后查到一篇相当的文章(/article/7152830.html),我将导入改为:
[DllImport("F:\\C++\\intellectDFIPublish121023\\dll\\mwrf32.dll", EntryPoint = "hex_a",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int16 hex_a(ref Byte hex, ref Byte asc, Int16 len);
问题解决了,我想了想原因,主要是我觉得参数hex并不需要返回值,所以不需要ref,而asc需要返回值,就用了ref,结果就出错了,看来对ref的理解还不够呀,原来作为引用传值还起着类似指针的作用,需要牢记!
相关文章推荐
- C#调用C++DLL时遇到的PInvoke 函数的调用导致堆栈不对称问题
- C# 调用 C++ 写的Dll 遇到的问题(调用DLL 自动退出) win32已停止工作
- C#调用C++Dll封装时遇到的一系列问题【转】
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的小问题
- C#调用C++Dll封装时遇到的一系列问题
- 关于c#调用c++的dll遇到的问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题
- C#调用C++Dll封装时遇到的一系列问题(2)
- c#程序调用c++编写dll需要注意问题
- 关于C#中调用C++编写的DLL(非托管的DLL)的实现和问题记录
- vs2010下V C++调用C#编写的dll时可能遇到的问题
- C# 调用 C++ 写的Dll 遇到的问题(调用DLL 自动退出)
- C#调用C++编写的COM DLL封装库的问题解决方案
- C#调用C++Dll封装时遇到的一系列问题 参考
- C#调用C++Dll封装时遇到的一系列问题