c++創建包含opencv的dll供C,C#調用

最近做項目,需要將C++算法封裝成dll,給C#調用,之前沒接觸過C#,現學一波,只做了dll並用C#測試了下,運行成功。記錄下來過程,供大家參考。
編程環境:VS2013+opencv2.4.13
步驟:
1.創建C++項目,製作dll.
(1)打開vs,新建->項目->win32控制檯項目
圖1
圖2
(2)選擇dll,點擊完成
圖3
(3)生成了c++項目。默認包含幾個cpp和h文件。
圖4
(4)打開Win32Project1.cpp文件,編寫如下函數。OpenCV中包含目錄、庫目錄、鏈接器附加依賴項配置這裏不再詳述。
圖5
代碼如下:

#include "stdafx.h"
#include "Win32Project2.h"
#include <iostream>
#include <string>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;

char* _stdcall show(char* name)
{
	Mat img = imread(name);
	if (img.empty())
	{
		return "can not open";
	}
	else
	{
		imshow("test", img);
		waitKey(0);
		return "open!";
	}
}

(5)右鍵頭文件文件夾-添加-新建項,創建Win32Project1.h文件
圖6
代碼:

#pragma once
#include <iostream>
extern "C" _declspec(dllexport) char * _stdcall show(char* name);

(6)之後就可以生成解決方案了,注意這裏選擇的“Debug”模式,平臺是“Win32”。生成後的dll和lib文件在C#項目對應文件夾的debug文件夾下(先建立c#項目,一會附圖添加dll和lib)
2.創建c#項目
(1)打開vs,如下設置,
圖7
(2)創建好了之後,需要將第一步生成的dll放到該c#文件夾下,例如c#中我選擇的是“debug”模式,注意平臺也對應Win32,如下,將dll放到了文件夾下。
t圖8
(3)在c#的cs文件中調用dll,在C#中Program.cs填寫如下代碼
圖8
代碼:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace c.demo2
{
    class Program
    {
        [DllImport(@"Win32Project1.dll", EntryPoint = "show", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
        extern  static IntPtr show([MarshalAs(UnmanagedType.LPStr)]string name);

        static void Main(string[] args)
        {
            IntPtr name = show("D:\\1.jpg");//圖片路徑
            string check = Marshal.PtrToStringAnsi(name);
            Console.WriteLine(check);
            Console.ReadKey();
        }
    }
}

圖9
程序運行成功!
參考鏈接
如需製作C++版dll,請參考本人另一篇博客:
參考鏈接2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章