C# 调用C++ 代码 封装的DLL 的问题

Nickiven007 Nickiven007 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本人现在尝试封装C++代码,将生成的DLL供C#调用。但是在调试的过程中,不知道哪里出了什么问题,只要一执行到抽取的方法语句时,就会自动跳出Debug。请大家帮我看一下:

代码如下:

待封装的方法,来自方法类:

Void Func::Read (
HANDLE hDevice,
BYTE Address,
WORD BufferLength1,
BYTE *pOutBuffer1,
WORD BufferLength2,
BYTE *pInBuffer2
){......}

C++封装方法

extern "C" __declspec(dllexport) int __stdcall Read(
char Address,
short BufferLength1,
char *pOutBuffer1,
short BufferLength2,
char *pInBuffer2
);
__declspec(dllexport) int __stdcall Read(
char Address,
short BufferLength1,
char *pOutBuffer1,
short BufferLength2,
char *pInBuffer2
) {
BYTE c1 = *pOutBuffer1, c2 = *pInBuffer2;
func.Read(hDevice, Address, BufferLength1, &c1, BufferLength2, &c2);
*pOutBuffer1 = c1;
*pInBuffer2 = c2;
}

C#抽取方法 调用

[DllImport("C:\\Users\\......\\Test.dll")]
public static extern unsafe void Read(byte Address, int BufferLength1, ref byte[] inbuffer, int BufferLength2, ref byte[] outbuffer);

byte[] inBuffer = new byte[2];
byte[] OutBuffer = new byte[128];
inBuffer[0] = ((0 & 0xFF00) >> 8); // Form the start address
inBuffer[1] = (0 & 0x00FF);

Read((byte)0x50, 2, ref inBuffer, 128, ref OutBuffer);

不确定是不是C,C++,C#的类型对应关系有问题,请大家帮我看一下,谢谢!
...全文

相关推荐

C#使用CLR调用C++的DLL库

C#使用CLR调用C++的DLL库的windows完整解决方案 说明如下: 1、工程一:C++的DLL 2、工程二:C++的CLR的类库 3、工程三:C#的exe

ggm0928

Qt程序中调用C#编写的dll

最近在使用Qt整合以前的一个工具时,发现有几个dll是采用C#写的,当然可以把C#写的dll重新在Qt中用C++写,虽然这是几个C#写的dll的函数接口使用的参数都比较简单,只用了int和string类型等,但在函数内部却还使用了C#的专用一些类,如果重写还是很麻烦,就查找了一些文章,多数都是说采用把C#写的dll采用COM注册方式让Qt调用,但是这样又要重新编译以前的C#项目,实在是很麻烦,所以...

CoastFF

C++代码封装成dll供C#中调用、调用dll无可用源

C#工程不可以直接调用C++的头文件和Lib库等 所以在程序中C#需要调用的现象,先将C++的东西封装成动态链接库,再调用 若调用dll时显示:无可用源调用,说明导入的DLL路径不对。 静态库和动态库区别: 静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加

一枚努力的程序猿

C#调用C++DLL传递结构体数组的终极解决方案

在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应。这时怎么办,第一反应是C#也定义结构体,然后当成参数传弟。然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是返回值却不是我们想要的,经过调试跟踪后发现,那些值

_学而时习之_

FFmpeg供unity使用的 dll的源代码

不太会c++,第一次用VS发布dll,查资料才调通的,可以生成dll。有需要可以拿去一用 1111111111111

qq_31819645
评论
收藏 已收藏
分享
返回顶部
Nickiven007
非技术区 7,776 成员 63,111 内容