2011-02-15 104 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,如果是静态的,或者通过创建类的对象并调用对象上的函数)。