Fork me on GitHub

C#调用C++类(内含OpenCV代码)

C#调用C++类(内含OpenCV代码)

C++工程通过托管代码生成dll供C#工程调用,即便C++工程中的类用到了其他依赖库也没关系。下例中C++工程用OpenCV读取图片并在窗口中显示,C#工程引用C++工程生成的dll,也可以做到读取图片并在窗口中显示。

C++工程

新建C++工程,配置中设置输出类型为动态库(.dll),公共语言运行时支持设置为“公共语言运行支持(/clr)”

首先新建fatory类: factory.h

#ifndef FACTORY_H
#define FACTORY_H

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;
class  factory
{
public:
    void show();
};
#endif

factory.cpp

#include "factory.h"
#include <opencv2\opencv.hpp>
using namespace cv;
void factory::show()
{
    Mat img = imread("1.jpg");
    imshow("src",img);
    waitKey(0);
}

然后新建托管类clrClass: clrClass.h

#pragma once
#include "factory.h"
public ref class clrClass   //一定记得加public ref
{
public:
    clrClass(void);
    ~clrClass(void);
    int member;
    void showImage();
private:
    factory *clrFac;
};

clrClass.cpp

#include "clrClass.h"
#include "factory.h"
clrClass::clrClass(void)
{
    clrFac = new factory();
}

clrClass::~clrClass(void)
{
}

void clrClass::showImage()
{
    clrFac->show();
}

然后编译生成,在你的工程的debug/release目录下就会生成相应的dll文件。

C#工程

新建C#工程,在引用中添加刚刚生成的dll,在program.cs中添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace refDll
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            clrClass clr = new clrClass();  //新建一个托管类对象
            clr.showImage();  //调用托管类函数
        }
    }
}

运行:

clrShow

转载请注明出处:BackNode

My zhiFuBao

Buy me a cup of coffee

blogroll

social