从现有代码中创建.dll

时间:2012-07-11 10:45:30

标签: c++ dll

这是一个新手请求。我在寻找.dll创作的资料。特别是,我想用一个简单的3D引擎创建一个.dll,我已经了解了这个过程。我需要有关动态链接库的信息比维基百科页面更深入,它们是如何创建的,必要的,如何为“debug”和“release”创建不同的.dll文件,如何为它创建PDB文件以及如何创建一个头文件,允许从a,fe,C ++程序中轻松使用该库。具有强大理论方面的材料(不是那么多,“如何在视觉工作室中创建动态链接库”)会很棒。

请分享关于这个主题的好材料,我能找到的只是一些信息,并没有为我画画。

2 个答案:

答案 0 :(得分:5)

在线之间阅读,我认为你真的想知道一般的库而不是dll的具体。 只是一个方便的对象(已编译)代码包,以及有关如何调用它的一些信息。在C ++中,这通常采用.h文件的形式。

使用静态库(.lib),链接器会以与所有其他类完全相同的方式提取所需的代码。普通类将被编译为目标代码(MyClass.obj),当它们全部完成时,链接器将它们全部组合在一起,并使用适当的地址连接任何对象间调用。这与.lib库文件完全相同。您最终会得到一个可执行代码的大球,其中包括您的类以及其中的库函数。

使用动态库(。dll),唯一的区别是链接(连接)在运行时而不是在编译时发生,并且库对象代码保留在一个单独的球中 - DLL文件。编译exe时,所有使用库中函数的调用都会映射到存根函数。当Windows为您加载dll时,它会将dll代码粘贴到与您的进程相同的内存区域,并将存根函数连接到现在可用的实际函数。

唯一的另一个区别是,dll必须公开Windows在加载或卸载dll时可以调用的函数,以防dll想要进行任何初始设置/清除。传统上称为DllMain()。

如果你想了解库,我会先集中精力创建一个静态.lib,然后再担心dll的问题。这是大部分工作的地方。一旦你有一个lib,它就是孩子的游戏,把它变成一个dll。

创建库时需要考虑的主要事项是如何公开 API (应用程序编程接口)。这就是您要向使用您的库的人员公开的函数/类。您不必全部公开它们,但您必须确定要公开的内容。你是打算公开一些C风格的函数,还是要暴露整个对象?这是设计图书馆时的真正挑战。您应该尝试使您的API易于使用,并且如果人们(以及您!)将会发现您的库有用,则应尽可能明显。

对于pdb文件,不同名称的发布/调试模块,以及创建.h文件。这些与在exe中执行此操作相同。

答案 1 :(得分:1)

1)使用VS向导创建一个新的DLL项目。

2)将现有的源文件添加到其中。

3)将要从DLL导出的函数的名称放入* .def文件(应该由向导创建),described here

基本上就是这样。向导会自动创建调试和发布配置,但如果您希望以不同方式命名2个变体,则可以更改其输出名称:转到Project Properities - >配置属性 - >一般 - >目标名称。

相关问题