C#與C++的Unmanaged 程式碼互動小試(C#調用C++的DLL)

來源:互聯網
上載者:User

 

  自從看了http://msdn.microsoft.com/zh-cn/library/ms173184(VS.80).aspx及http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices(VS.80).aspx 對C#與C++通用語言執行平台下是否可以互操作產生極大興趣。

第一次用C#調用C/C++產生的DLL檔案,感覺有點新奇,其實只是實現了運行在公用語言運行庫 (CLR) 的控制之外的“Unmanaged 程式碼”(運行在公用語言運行庫(CLR)的控制之中的代碼碼稱為“Managed 程式碼“)的東西,怎樣運用在託管下的非託管呢?現在給感興趣的初學者簡單地寫一個實現的全過程吧(有什麼問題千萬別笑):

1.用VS2008選擇其它語言(C++)建立一個控制台應用程式命名為Mydll1,然後選擇應用程式類型為DLL,確定

 項目

 

在標頭檔 stdafx.h 下添加如下聲明:

 

#define LIBEXPORT_API extern "C" __declspec(dllexport) 
LIBEXPORT_API int Add(int a, int b);

 

 

在MyDll.cpp中實現這個函數:

#include "stdafx.h"

int Add(int a,int b)
{
 return a+b;
}

 

注意如果實現的方法是聲明在其它標頭檔中的,一定要 加#include "xxx.h" 來引用這個聲明了這個函數標頭檔。

產生MyDll.dll和MyDll.lib。

2.在Visual C# .net中引用dll檔案

建立Visual C#控制台應用程式命名為TestImportDll;

將MyDll.dll和MyDll.lib拷貝到可執行檔目錄下():

在Praogram.cs中添加引用using System.Runtime.InteropServices;

按如下方式聲明一個將要引用MyDll.dll中函數的類:

  

 class test
    {
        //[DllImport("..\\..\\lib\\CppDemo.dll")]
        //public static extern void Function();

        //[DllImport("..\\..\\lib\\CppDemo.dll")]
        //public static extern int Add(int i, int j);
        [DllImport("..\\..\\Lib\\Mydll1.dll")]
        public static extern int Add(int a, int b);
    }

 

 最後在Main函數中調用這個類輸出結果:

 

 static void Main(string[] args)
        {           

            Console.WriteLine("result: " + test.Add(2, 3).ToString());

            Console.ReadLine();
        }下面是Program.cs的代碼:

END():

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.