C#调用C++的dll时,c++ dll函数接口中尽量不要用bool返回类型

本文讲述了在C#调用C++编写的DLL时,遇到bool返回类型不一致的问题。作者发现C++的bool返回值在经过C#调用后可能会出现错误的转换。为了解决这个问题,建议将C++和C#双方的返回类型都改为int,以确保返回值的一致性。
摘要由CSDN通过智能技术生成

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值