做一个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#调用后的返回值是一致的