C#调用C++的dll时,c++ dll函数接口中尽量不要用bool返回类型
2014-05-29 16:37
323 查看
做一个C++的dll,用c#来调用,之前的函数定义为
c++ 中声明为:
SECURITYLOGIN_API bool __stdcall SecurityUser_Check(int id,
unsigned char type,TCHAR * originalPwd, Fn_SecruityEncrypt fn_Encrypt,
SecurityUserCheckResult & ret);
c#中对应声明为:
[DllImport(@"SecurityLogin.dll", EntryPoint = "SecurityUser_Check", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern bool SecurityUser_Check(int id, byte type,
String originalPwd, Fn_SecruityEncrypt fn_Encrypt,
ref SecurityUserCheckResult ret);
在正两种声明情况下,通过c#的接口间接调用c++函数时,c++的返回的bool值不能正确的返回到c#中,例如c++中返回是false,而在c#调用后返回的结果却是true,
我个人认为可能是托管与非托管在bool类型上的内存占位宽度不通,但是没有深究过。
所以需要将两边的返回值类型都改为int,那么c++和c#调用后的返回值是一致的
c++ 中声明为:
SECURITYLOGIN_API bool __stdcall SecurityUser_Check(int id,
unsigned char type,TCHAR * originalPwd, Fn_SecruityEncrypt fn_Encrypt,
SecurityUserCheckResult & ret);
c#中对应声明为:
[DllImport(@"SecurityLogin.dll", EntryPoint = "SecurityUser_Check", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern bool SecurityUser_Check(int id, byte type,
String originalPwd, Fn_SecruityEncrypt fn_Encrypt,
ref SecurityUserCheckResult ret);
在正两种声明情况下,通过c#的接口间接调用c++函数时,c++的返回的bool值不能正确的返回到c#中,例如c++中返回是false,而在c#调用后返回的结果却是true,
我个人认为可能是托管与非托管在bool类型上的内存占位宽度不通,但是没有深究过。
所以需要将两边的返回值类型都改为int,那么c++和c#调用后的返回值是一致的
相关文章推荐
- C# 调用C++ DLL 返回类型为字符的接口 出现异常 解决办法
- C# 调用C++dll中接口,返回const char*
- c# 调用c++ dll文件中的bool类型解决办法
- C#调用VC DLL接口函数参数类型转换方法介绍
- C#调用VC DLL接口函数参数类型转换的方法
- C#中调用C++的dll的参数为指针类型的导出函数
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- [2011-11-23] 教训:C++的DLL和C#采用不同的内存管理,不要返回指向堆的指针,而改成读写文件
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- c#调用C++的DLL的所有数据类型转换
- C#调用VC DLL接口函数参数类型转换方法介绍
- C#调用VC的DLL的接口函数参数类型转换一览表
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[]
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用C++版本dll时的类型转换需要注意的问题小结
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用C++版本dll时的类型转换要注意的问题
- C#调用C++的DLL搜集整理的所有数据类型转换方式