做一个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#调用C++编写的DLL时,遇到bool返回类型不一致的问题。作者发现C++的bool返回值在经过C#调用后可能会出现错误的转换。为了解决这个问题,建议将C++和C#双方的返回类型都改为int,以确保返回值的一致性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



