2011-02-15 103 views
19

我是C#的新手,我正在學習如何使用DLL。我試圖將我的對象包裝在一個DLL中,然後在我的程序中使用它。從DLL調用函數?

public class Foo // its in the DLL 
{ 
    public int ID; 
    public void Bar() 
    { 
     SomeMethodInMyProgram(); 
    } 
} 

所以我嘗試收拾這一個DLL,但我不能,因爲編譯器不知道是什麼SomeMethodInMyProgram()是。

我想用它喜歡:

class Program // my program, using DLL 
{ 
    static void Main(string[] args) 
    { 
     Foo test = new Foo(); 
     test.Bar(); 
    } 
} 

回答

20

通過Solution Explorer中添加DLL - 右鍵點擊引用 - >添加引用然後「瀏覽」給你的DLL - 然後它應該可用。

4

你需要的DLL實際加載到您在運行時應用程序,從而DLL的動態部分。您還需要頭文件來定義DLL中的函數,以便您的編譯知道已定義了哪些函數。我在這裏的知識是基於C++所以這是如何工作的C#我不肯定,但它會是類似的東西...

+3

在這方面,C#與C \ C++完全不同。 .NET運行時可以從.dll中提取足夠的信息來確定方法簽名是什麼(在C#中沒有頭文件) – Jimmy 2011-02-16 00:10:03

+2

啊,那麼。呃......繼續 – thecoshman 2011-02-16 00:17:47

28

取決於什麼類型的DLL。這是建立在.NET?如果它是非託管代碼,那麼這裏是一個例子,否則Rob的答案將起作用。

不受管理的C++ DLL例如:

using System; 
using System.Runtime.InteropServices; 

您可能需要使用的DllImport

[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")] 
static extern void mpscExit(); 

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 

然後,每個這些被稱爲是這樣的:

// a specific DLL method/function call 
mpscExit(); 
// user32.dll is Microsoft, path not needed 
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0); 
2

我在這裏參加派對已經很晚了,但我離開這個答案的時候有人把我的頭髮拉出來。所以基本上,當面臨這個問題時,我沒有VS IDE的豪華感。我試圖通過使用csc的cmdline編譯代碼。爲了引用一個dll,只需將編譯器標誌/ r:PathToDll/NameOfTheDll添加到csc。

的命令看起來像

CSC/R:PathToDll/NameOfTheDll /出:OutputExeName FileWhichIsReferencingTheDll.cs

FileWhichIsReferencingTheDll.cs添加using namespace AppropriateNameSpace;訪問功能(通過調用class.functionName,如果是靜態的,或者通過創建類的對象並調用對象上的函數)。