C# 调用C++ 代码 封装的DLL 的问题
代码如下:
待封装的方法,来自方法类:
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
Qt程序中调用C#编写的dll
最近在使用Qt整合以前的一个工具时,发现有几个dll是采用C#写的,当然可以把C#写的dll重新在Qt中用C++写,虽然这是几个C#写的dll的函数接口使用的参数都比较简单,只用了int和string类型等,但在函数内部却还使用了C#的专用一些类,如果重写还是很麻烦,就查找了一些文章,多数都是说采用把C#写的dll采用COM注册方式让Qt调用,但是这样又要重新编译以前的C#项目,实在是很麻烦,所以...
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


非技术区
