C#调用C++接口主要事项。
- C#调用普通类型数据自定义数据结构C++接口使用引用即可返回所需值,数据结构C++和C#都要定义如下图所示:
C++端
C#端:
- C#端必须使用关键字DllImport重新声明接口,使用DllImport关键字需包含系统域名:using System.Runtime.InteropServices下代码所示:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Data;
using System.Configuration;
using System;
using OpenCvShar
class Program
{
[DllImport("MoniterExtractInterface.dll", EntryPoint = "GetUpAndButtPoint",CallingConvention.Cdecl)]
private static extern boolGetUpAndButtPoint(ref IntPtr InImage, stBlobRect BolbRec, ref stUpAndButtPoint OutPoint);
3.C++导出接口必须使用extern "C"关键字导出如下代码:
extern "C"
{
//屏幕提取流程
__DLL bool MoiterExtractModelFlow(cv::Mat **SrcImage, cv::Mat **mSearchImg, cv::Mat **DisImage);
//获取端点
__DLL bool GetUpAndButtPoint(cv::Mat **SrcImage, stBlobRect BolbRec, stUpAndButtPoint &OutPoint);
}
4、C++生成dll库必须放在C#生成可执行文件目录下。
5、如果需要调试在C#中调试C++调用的接口必须把C++生成的pdb文件同步拷贝到C#生成可执行文件目录下,同时C#工程需要把方案选选项属性 代码优化去掉 和 启动本机代码调试 勾上,如下图所示: