点击上方蓝字关注我们
微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
引子
C++ DLL
第一:在VS中建立一个C++ DLL空项目
第二:构建C++ DLL的代码或者类库
第三:声明导出函数接口与实现
//=========导出函数C++调用接口============
class DLL_API MyTestDLL {
public:
int addData(int a, int b);
~MyTestDLL();
};
相关类的实现如下:
MyTestDLL::~MyTestDLL() {
std::cout << "destory instance done!" << std::endl;
}
int MyTestDLL::addData(int a, int b) {
int sum = 0;
sum = a + b;
std::cout << "sum: " << sum << std::endl;
return sum;
}
extern "C" __declspec(dllexport) void* __stdcall createInstance();
extern "C" __declspec(dllexport) bool __stdcall addData(void* p, int a, int b);
然后完成相关实现C++代码即可。
C++ 与C# 数据交换
图像数据传递方式:
C++中的接口定义
extern "C" __declspec(dllexport) bool __stdcall mergeImg(uchar * src, int w, int h);
C#中的导出接口定义
[ ]
static extern bool mergeImg(IntPtr src, int w, int h);
基本数据类型传递
针对常见的基础数据类型,C#跟C++中基本是关键字一一对应的关系,直接参数传递即可,举例如下。
extern "C" __declspec(dllexport) int __stdcall addData(int a, int b);
[ ]
static extern int addData(int a, int b);
struct MyStruct {
int age = 23;
bool gender=false;
};
对应的结构体调用导出接口
extern "C" __declspec(dllexport) void __stdcall getYourStructInfos(MyStruct* infos);
struct MyStruct {
public int age;
public bool gender;
};
[ ]
static extern void getYourStructInfos([In, Out] MyStruct[] infos);
OpenCV算子工作流引擎
https://appetjpz4tj8166.h5.xiaoeknow.com/p/course/ecourse/course_2XtK2sEi7HNUwt2WscP6tFwxpIb
推荐阅读
三行代码实现 TensorRT8.6 C++ 深度学习模型部署