C#调用C++的动态链接库
- 问题所在
- 使用VS编辑所需要调用的函数(c++)
- 创建c#项目,调用c++动态库
这是一个测试代码。
问题所在
c# 调用c++的dll库不能引用
解决办法是
1:在写c++代码的时候,把他加入到dll中
2:将c++的dll库放入指定的目录
3:c#代码中引用dll的函数
问题
使用VS编辑所需要调用的函数(c++)
1 定义SUM.h头文件,头文件中就一行代码,将加法函数输出到dll中
#pragma once
#include <iostream>
//将加法函数输出到dll中
extern "C" _declspec(dllexport) int sum(int a, int b);
2 定义加法函数。CPP中只有一个加法函数
3 用主函数测试一下:
4 将CPP属性中配置类型改为动态库.dll类型,将平台解决方案改为X64.
5 重新生成
然后在项目debug目录下面会生成ConsoleApplication1.dll和ConsoleApplication1.lib两个文件(文件名是CPP项目命名的名字),将其复制
创建c#项目,调用c++动态库
创建c#项目和引入OpencCV
这样就配置好了C#的OpenCV环境了。
然后就是调用c++的dll库了
[DllImport("ConsoleApplication1.dll")]
public static extern int sum(string a, string b);
在代码中引入
将生成的dll库放到这个目录
D:\Code\c#\ConsoleApp1\ConsoleApp1\bin\x64\Debug
完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
namespace ConsoleApp1
{
internal class Program
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("ConsoleApplication1.dll")]
public static extern int sum(int a, int b);
static void Main(string[] args)
{
Console.WriteLine("aa");
Mat source = new Mat(@"D://Code//c#//YoloV5DetectPro2//YoloV5DetectPro//1.jpg", ImreadModes.Color);
Cv2.Resize(source, source, new OpenCvSharp.Size(480, 480), 0);
Cv2.ImShow("Demo", source);
Console.WriteLine("show image");
string STRING1 = "D://Code//c#//YoloV5DetectPro//YoloV5DetectPro//1.jpg";
string STRING2 = "D://Code//c#//YoloV5DetectPro//YoloV5DetectPro//best.onnx";
Console.WriteLine(sum(22, 44));
Cv2.WaitKey(0);
}
}
}
视频教程
文档(不全)
核心文档(extern “C” _declspec(dllexport) )