最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#調(diào)用C++的dll兩種實(shí)現(xiàn)方式(托管與非托管)

 更新時(shí)間:2023年08月14日 10:45:51   作者:陽(yáng)光下的Smiles  
這篇文章主要介紹了C#調(diào)用C++的dll兩種實(shí)現(xiàn)方式(托管與非托管),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C#調(diào)用C++的方式分為兩種:

(1)非托管的方式進(jìn)行調(diào)用

(2)采用托管的方式進(jìn)行調(diào)用

一、使用非托管類調(diào)用C++的dll

1、首先在vs2010新建項(xiàng)目選擇win32應(yīng)用程序,并設(shè)置為DLL,如下圖所示

 

2、添加MyDLL.cpp源文件,其中代碼:

#include <cv.h>
#include <highgui.h>
extern "C" _ _declspec(dllexport)void Show()  
{  
	IplImage *img = cvLoadImage("E:\\圖庫(kù)\\abc.jpg");
	cvNamedWindow("Image:",1);
	cvShowImage("Image:",img);
	cvWaitKey();
	cvDestroyWindow("Image:");
	cvReleaseImage(&img);
	return ;
}

extern "C"外部聲明,表示函數(shù)和變量是按照C語(yǔ)言的方式編譯和鏈接的。

__decspec(dllexport)的目的是為了將對(duì)應(yīng)的函數(shù)放入到DLL動(dòng)態(tài)庫(kù)中。

extern "C" _declspec(dllexport)的目的是為了使用DllImport調(diào)用非托管C++的DLL文件。因?yàn)槭褂肈llImport只能調(diào)用由C語(yǔ)言函數(shù)做的DLL。

3、設(shè)置項(xiàng)目MyDLL->屬性->配置屬性->公共語(yǔ)言運(yùn)行時(shí)支持->公共語(yǔ)言運(yùn)行時(shí)支持(、\clr),編譯,將生成的dll(debug目錄下 )。

 

 

4、新建C#控制臺(tái)應(yīng)用程序dllConsoleApplication1,添加引用->瀏覽->選擇生成的DLL添加,將上文所生成的DLL拷貝到C#應(yīng)用程序的bin里面然后應(yīng)用如下方式進(jìn)行調(diào)用:

 

5、在dllConsoleApplication1項(xiàng)目上新建一個(gè)CPPDLL類,編寫以下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;   //必須添加,不然DllImport報(bào)錯(cuò)
namespace dllConsoleApplication1
{
    class CPPDLL
    {
        [DllImport("MyDLL.dll", CharSet =CharSet.Ansi)] //引入dll,并設(shè)置字符集
		//[DllImport("MyDLL.dll")] //可以替代上一句代碼
        public static extern int Show();
    }
    class Program
    {
        static void Main(string[] args)
        {
            CPPDLL.Show();
            Console.ReadLine();
        }
    }
}

6、運(yùn)行結(jié)果:

 

二、采用托管的方式進(jìn)行調(diào)用C++的dll

1、首先在vs2010新建項(xiàng)目選擇win32應(yīng)用程序,并設(shè)置為DLL,如下圖所示

 

2、在前面的托管DLL項(xiàng)目中添加Functions.h頭文件和Functions.cpp源文件實(shí)現(xiàn)利用OpenCV庫(kù)輸出顯示圖片。

在Functions.h中:

void?show();

在Functions.cpp中:

#include "Functions.h"
#include <opencv2/opencv.hpp>
using namespace cv;
void show()
{
	Mat img = imread("E:\\圖庫(kù)\\abc.jpg");
	imshow("src",img);
	waitKey(0);
}

3、使用C++托管類進(jìn)行封裝。新增clrClass類。并且點(diǎn)擊“解決方案”中的項(xiàng)目托管DLL->屬性->配置屬性->公共語(yǔ)言運(yùn)行時(shí)支持->公共語(yǔ)言運(yùn)行時(shí)支持(、\clr),然后進(jìn)行編譯生成DLL。

在clrClass.h中有如下代碼:

#pragma once
public ref class clrClass
{
public:
	clrClass(void);
	~clrClass(void);
	int member;//自添加
	void showImage();//自添加
};

在clrClass.cpp中有如下代碼:

#include "clrClass.h"
#include "Functions.h"http://自添加
clrClass::clrClass(void)
{
}
clrClass::~clrClass(void)
{
}
void clrClass::showImage()//自添加
{
	show();
}

 

 

4、C#調(diào)用C++生成的Dll文件

新建一個(gè)C#控制臺(tái)程序,添加引用->瀏覽->選擇生成的DLL添加。

 

5、在program.cs添加代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test_托管DLL
{
    class Program
    {
        static void Main(string[] args)
        {
            clrClass ClrCLass =new clrClass();
            ClrCLass.showImage();
        }
    }
}

6、運(yùn)行C#程序,結(jié)果如圖

 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

永泰县| 曲周县| 舟曲县| 峨眉山市| 洪泽县| 恩施市| 上饶县| 荥阳市| 溧阳市| 南溪县| 金堂县| 祥云县| 麻城市| 彭水| 普陀区| 文登市| 商洛市| 江源县| 古浪县| 古田县| 治多县| 容城县| 罗定市| 蒲江县| 长宁区| 扶风县| 昭觉县| 南华县| 金平| 靖远县| 横峰县| 临夏市| 呼和浩特市| 吉隆县| 建始县| 民乐县| 海阳市| 平利县| 北票市| 广丰县| 马山县|