WPF(C#)中调用C++的Dll库(使用C++ Opencv外部库)

之前用C#开发了一个WPF的前端项目,想要实现后端逻辑的代码,但是项目算法代码是用C++写的。所以需要把C++函数打包成Dll库,再在WPF中调用dll实现运算。

软件版本:VS 2022 + Opencv4.5.1 + WPF net6.0-Windows
tip:C++程序还使用了Opencv外部库,所以还需要额外操作,下面讲。

首先生成C++程序的dll:

1.定义导出宏

MYAPI_EXPORTS

2.定义导出的函数如下,这里的testWPF()就是自定义的C++函数

//导出dll宏
#ifdef MYAPI_EXPORTS
#define MYAPI __declspec(dllexport)
#else
#define MYAPI __declspec(dllimport)
#endif
extern "C" {
	MYAPI void testWPF();
}

3.项目属性->配置属性->常规->配置类型->动态库.dll,注意是Debug-X64平台,与后面WPF项目的平台一定要对应

4.运行程序,生成Dll文件(SIM_Test02.dll),dll文件一般在你的项目路径\x64\Debug,这个目录里

5.把刚刚导出的SIM_Test02.dll和opencv_world451d.dll放入WPF的目录


WPF目录:你的WPF项目目录\bin\x64\Debug\net6.0-windows

opencv_world451d.dll位置:你的Opencv目录\OpenCV4.5.1\opencv\build\x64\vc15\bin

SIM_Test02.dll位置:你的C++项目路径\x64\Debug

tip:

这里C++和WPF都是Debug-X64版本,所以要用opencv_world451d.dll而不是opencv_world451.dll,一定要注意

6.在WPF中引入dll并声明dll中的函数

//这WPF中.cs文件中调用dll中testWPF函数所需要的代码

using System.Runtime.InteropServices;

namespace SIM.ViewModels
{
    public class MainViewModel : INotifyPropertyChanged

    {
        //"SIM_Test02.dll"s是导出dll文件名,"testWPF"是C++中定义的函数名字
        [DllImport("SIM_Test02.dll", EntryPoint = "testWPF", CallingConvention = CallingConvention.Cdecl)]
        public static extern void testWPF();
    }
}

这里贴出引入的代码,后面在此文件里就可以直接使用testWPF()这个函数了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值