C#调用C++DLL

在尝试调用C++DLL时,C#遇到读写受保护内存的错误,这通常由于C#和C++参数类型不匹配引起。解决方法包括参照C++DLL接口与C#参数类型的对应表,确保类型一致,并通过设置DllImport属性,如CharSet=CharSet.Ansi和CallingConvention=CallingConvention.StdCall来修正堆栈对齐问题。
摘要由CSDN通过智能技术生成

C#调用C++DLL出现错误

在这里插入图片描述
在这里插入图片描述

尝试读取或写入受保护的内存。
这个错误一般是因为调用接口函数时C#参数类型和C++参数类型不对应导致的。
C++DLL接口参数类型和C#对应参数类型对照表在网上很多。
//C++中的DLL函数原型为
//extern “C” __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char* 变量名2)
//extern “C” __declspec(dllexport) bool 方法名二(const unsigned char* 变量名1, char* 变量名2)

    //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试
    //c++:HANDLE(void   *)          ----    c#:System.IntPtr 
    //c++:Byte(unsigned   char)     ----    c#:System.Byte 
    //c++:SHORT(short)              ----    c#:System.Int16 
    //c++:WORD(unsigned   short)    ----    c#:System.UInt16 
    //c++:INT(int)                  ----    c#:System.Int16
    //c++:INT(int)                  ----    c#:System.Int32 
    //c++:UINT(unsigned   int)      ----    c#:System.UInt16
    //c++:UINT(unsigned   int)      ----    c#:System.UInt32
    //c++:LONG(long)                ----    c#:System.Int32 
    //c++:ULONG(unsigned   long)    ----    c#:System.UInt32 
    //c++:DWORD(unsigned   long)    ----    c#:System.UInt32 
    //c++:DECIMAL                   ----    c#:System.Decimal 
    //c++:BOOL(long)                ----    c#:System.Boolean 
    //c++:CHAR(char)       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26049793

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值