亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

 

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

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

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

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

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

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

 

 

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

 

5、在dllConsoleApplication1項目上新建一個CPPDLL類,編寫以下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;   //必須添加,不然DllImport報錯
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、運行結(jié)果:

 

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

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

 

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

在Functions.h中:

void?show();

在Functions.cpp中:

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

3、使用C++托管類進(jìn)行封裝。新增clrClass類。并且點擊“解決方案”中的項目托管DLL->屬性->配置屬性->公共語言運行時支持->公共語言運行時支持(、\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文件

新建一個C#控制臺程序,添加引用->瀏覽->選擇生成的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、運行C#程序,結(jié)果如圖

 

總結(jié)

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

相關(guān)文章

  • C#圖像亮度調(diào)整的方法

    C#圖像亮度調(diào)整的方法

    這篇文章主要介紹了C#圖像亮度調(diào)整的方法,涉及C#操作圖像亮度的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)的序列化通用類實例

    C#實現(xiàn)的序列化通用類實例

    這篇文章主要介紹了C#實現(xiàn)的序列化通用類,實例分析了C#序列化與反序列化操作相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • c# 實現(xiàn)文件上傳下載功能的實例代碼

    c# 實現(xiàn)文件上傳下載功能的實例代碼

    這篇文章主要介紹了如何用c# 實現(xiàn)文件上傳下載功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#組件FormDragger窗體拖拽器詳解

    C#組件FormDragger窗體拖拽器詳解

    這篇文章主要為大家詳細(xì)介紹了C#組件FormDragger窗體拖拽器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 使用SkiaSharp在C#中如何生成圖像

    使用SkiaSharp在C#中如何生成圖像

    本文介紹了如何使用SkiaSharp庫在C#中生成和處理圖像,通過創(chuàng)建一個空白圖像并繪制一個正方形,我們展示了如何使用SkiaSharp的基本功能,如創(chuàng)建畫布、繪制圖形和保存圖像
    2025-01-01
  • c# 連接access數(shù)據(jù)庫config配置

    c# 連接access數(shù)據(jù)庫config配置

    c# 連接access數(shù)據(jù)庫config配置,需要的朋友可以參考一下
    2013-02-02
  • 基于C#實現(xiàn)高效示波器功能

    基于C#實現(xiàn)高效示波器功能

    這篇文章介紹了用?C#實現(xiàn)示波器功能的方法,包括使用?WinForm?及多種曲線控件,闡述了原理和思路,如定義緩存數(shù)據(jù)的隊列、轉(zhuǎn)化數(shù)組刷新顯示等,還提到注意事項及擴(kuò)展特性,最后呼吁點贊支持和交流,需要的朋友可以參考下
    2024-12-12
  • C#中的靜態(tài)字段double.Epsilon實例詳解

    C#中的靜態(tài)字段double.Epsilon實例詳解

    double.Epsilon 是C#中的一個靜態(tài)字段,表示 double 數(shù)據(jù)類型的最小可表示的正數(shù)值,這篇文章主要介紹了C#中的靜態(tài)字段double.Epsilon的相關(guān)知識,需要的朋友可以參考下
    2024-01-01
  • 利用C#開發(fā)瀏覽器擴(kuò)展的全過程記錄

    利用C#開發(fā)瀏覽器擴(kuò)展的全過程記錄

    做web開發(fā)的同學(xué),經(jīng)常會用到各種chrome瀏覽器插件,那么我們寄幾怎么開發(fā)一個插件呢(其實是瀏覽器擴(kuò)展)?這篇文章主要給大家介紹了關(guān)于利用C#開發(fā)瀏覽器擴(kuò)展的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 如何用C#實現(xiàn)SAGA分布式事務(wù)

    如何用C#實現(xiàn)SAGA分布式事務(wù)

    大家好,本篇文章主要講的是如何用C#實現(xiàn)SAGA分布式事務(wù),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論