如何在C#中创建和使用dll文件

时间:2011-04-05 19:40:22

标签: c++ dll load dllimport

我目前正在尝试学习如何在C#和C ++中编写和使用Windows的.dll文件。我想,一旦我理解了其中一个语言,我就能很容易地找出另一个语言。我今天搜索了超过5个小时,但是找不到工作的.dll指南却没有运气。它们要么已经过时,要么拒绝使用我的编译器,或者只是彻头彻尾的垃圾。有人知道工作指南吗?我正在使用Dev C ++和VC ++ 2010.感谢您的帮助! :)

3 个答案:

答案 0 :(得分: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的,稍后可能会有一些小细节(如何搜索导入等)。

答案 1 :(得分:2)

C#中的DLL很容易。

  1. 创建一个构建为dll的新项目。
  2. 将对新dll项目的引用添加到现有项目中。
  3. 在您的dll中使用标记为public的类,就好像它们是原始项目的一部分一样。
  4. Peachykeen列出了从C ++ DLL导出类和函数的最基本方法。我建议有一种更先进的技术。而不是导出所需的每个类,而是从接口(具有至少一个纯虚方法的类)派生dll中的所有类。然后导出一个返回指向这些接口的指针的工厂函数。这减少了主可执行文件和dll之间的耦合,因为您只需要共享接口,而不是任何实现细节。

    代码项目有一篇关于这种技术的好文章。

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

    上述方法的一个很好的好处是它大大减少了编译时间。您可以完全重新实现DLL,而无需重新编译主应用程序。

答案 2 :(得分:0)

在visual studio中,它们现在被称为“程序集”而不是DLL。术语的变化令人困惑。创建DLL只需创建正确类型的项目并添加代码即可。从不同的语言或编译器使用DLL可能会很棘手。

您是否尝试过this教程?