2011-04-05 61 views
3

我目前正在嘗試學習如何在C#和C++中編寫和使用Windows的.dll文件。我想,一旦我理解了其中的一種語言,我就可以很容易地找出另一種語言。今天我搜索了5個多小時,但找到一份可以工作的.dll指南並沒有運氣。他們或者過時了,拒絕與我的編譯器一起工作,或者只是徹頭徹尾的垃圾。有沒有人知道指南工程?我正在使用Dev C++和VC++ 2010.感謝您的幫助! :)如何創建和使用C#中的dll文件

回答

2

在C#中的DLL很容易。

  1. 創建一個新的項目,建立一個DLL。
  2. 將對新dll項目的引用添加到現有項目中。
  3. 使用在您的dll中標記爲公共的類,就好像它們是您原始項目的一部分。

Peachykeen奠定了從C++ DLL導出類和函數的最基本的方法。我建議採用更先進的技術。而不是導出你需要的每個類,從接口(至少有一個純虛擬方法的類)中獲取dll中的所有類。然後導出返回指向這些接口的指針的工廠函數。這減少了你的主要可執行文件和dll之間的耦合,因爲你只需要共享接口,而不是任何實現細節。

代碼項目在這項技術上有一篇很好的文章。上面的方法

http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx

一個很好的好處是,它極大地減少編譯時間。您可以完全重新實現DLL,而無需重新編譯主應用程序。

+0

使用虛擬函數和工廠可以工作,使用虛擬函數可能比導出更容易,但我認爲設置稍微複雜一些。只是不同的風格,真的,都工作得很好。 – ssube 2011-04-06 02:14:31

0

在visual studio中,它們現在被稱爲「程序集」而不是DLL。術語的變化令人困惑。創建一個DLL包括創建一個正確類型的項目並添加代碼。然而,使用不同語言或編譯器的DLL可能會非常棘手。

你試過this教程嗎?

+0

爲什麼downvotes?答案是不完整的,因爲它不涉及C++,但C#方面是正確的,並且鏈接是相關的。 – Nathanael 2011-04-05 21:18:09

5

C#和C++中的DLL有些不同,尤其是在它們的使用方式上。 C#使用程序集,包含各種元數據,並隱藏大部分細節。 C++沒有,你必須告訴它什麼是導出和如何。

製作DLL文件一般包括編寫代碼,然後爲每個類或函數要使用(從DLL外),添加此位:

int __declspec(dllexport) function(int param); 
class __declspec(dllexport) object; 

要「出口」的符號,使它們從DLL外部可見。你只需要爲外部使用的類和類,只在類上使用(不是每種方法)。

使用該DLL時,您需要包含一個包含所有功能但具有__declspec(dllimport)筆記的標頭。這將告訴你的代碼使用這些外部DLL。您需要將lib(在編譯DLL時創建)作爲輸入文件提供給鏈接器,並且所有內容都應該排成一行。

一種簡單的方法來處理是:

#ifndef IMPORT_MYLIB 
# define MYLIB_API __declspec(dllexport) 
#else 
# define MYLIB_API __declspec(dllimport) 
#endif 

int MYLIB_API function(); 

當另一個應用程序使用該DLL,只需#define IMPORT_MYLIB和報頭將被適當地設置。

對於C#,您需要簡單地創建一個帶有公共類的庫,然後將其添加爲另一個項目的引用。然後你可以使用它的類,這兩個文件會自動鏈接在一起(非常簡單,但並不像C++的方法那麼幹淨)。

請注意,DLL是Microsoft特定的,並且稍後可能會對您感興趣的一些小細節(如何搜索導入等)。