C# 調用 C++ DLL 操作說明

來源:互聯網
上載者:User

(1)通過使用VS2008建立項目解決方案,在解決方案中新增C++工程(DLL)和C# 工程(用戶端)【建立C++DLL和C#工程的具體步驟在此不詳細說明,請參照相 關文檔】;

(2)編譯C++DLL工程和C#用戶端工程;

(3)編譯通過後將DLL產生的副檔名為Dll、Lib,以及編寫DLL時使用到的標頭檔 (副檔名為.h)全部複製到C#用戶端程式所在的Debug檔案夾下面;

(4)開啟C#用戶端程式,建立類:MyDLL(該類名供C#用戶端調用)

(5)在C#用戶端程式中引入命名空間:using System.Runtime.InteropServices;【之所以引用該空間,是因為在調用DLL時需要用到C#中API的一些特性】

(6)在MyDll類中寫所需要的函數,注意函數的前面應給該函數加一些特性,例如:

[DllImport("web.dll", EntryPoint = "?sum@CSpecialThing@@QAEHGPADPAUnc_pro@@@Z", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]

public static extern int sum(int FlibHndl, string cnctype, ref nc_pro nc_pro00);

首先介紹一下DllImport中的幾個參數的含義:

1. EntryPoing指示要調用的DLL進入點的名稱或序號。

如果你的方法名不想與api函數同名的話,一定要指定些參數,例如:

[DllImport("user32.dll", CharSet = Charset.Ansi, EntryPoint = "MessageBox")]

public static extern int MsgBox(IntPtr hWnd, string txt, string caption, int type);

在上面的例子中,我們可以看到,EntryPoint中似乎存在一引起亂碼:"?sum@CSpecialThing@@QAEHGPADPAUnc_pro@@@Z",為什麼會存在這樣的亂碼, 我們後面會繼續介紹,在些先介紹一下我們可以看懂的幾個符號的含義:

Sum:這是我們在C++的DLL中定義的函數名稱;

CSpecialThing:這是我們在DLL中定義的類;

    nc_pro:這是函數中的參數。為什麼只有一個呢?個人認為只有你的參數是特殊類型時(例如:struct,其它的類型可能也會這樣,但我目前的項目中只用到了消結構體),才會需要這樣調用。

有人可能覺得是不是我們在參數中用到了“ref”,那麼這個參數就會出現在這一堆亂碼中,我可以肯定的講,絕對不是。。。。。

至於其餘的符號,我也不知道是什麼意思了。。。。。

  2. CharSet控制調用函數的名稱版本及指示如何向方法封送string 參數。

此欄位被設定為CharSet值之一。如果 CharSet欄位設定為Unicode,則氖 字串參數在傳遞到非託管實現之前都被轉成Unicode字元。這還導致向DLLEntryPoint的名稱中追加字母“W”。如果此欄位設定為Ansi,則字串將轉換成ANSI字串,同時向DLLEntryPoint的名稱中追加字母“A”。大多數Win32 API使用這種追加“W”或“A”的約定。

3. CallingConvention指示向非託管實現傳遞方法參數時所用的CallConvention值

CallingConvention.Cdecl:調用方清理規模。它使您能夠調用具有var args的函數。

CallingConvention.StdCll:被呼叫者法清理堆棧。它是從Managed 程式碼調用非託管函數的預設約定。

(7)完成以上操作步驟後,你就可以在C#中調用 C++編寫的DLL了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.