这是一个新手请求.我在寻找.dll创作的资料.特别是,我想用一个简单的3D引擎创建一个.dll,我已经了解了这个过程.我需要有关动态链接库的信息比维基百科页面更深入,它们是如何创建的,必要的,如何为"debug"和"release"创建不同的.dll文件,如何为它创建PDB文件以及如何创建一个头文件,允许从a,fe,C++程序中轻松使用该库.具有强大理论方面的材料(不是那么多,"如何在视觉工作室中创建动态链接库")会很棒.
请分享关于这个主题的好材料,我能在这里找到的是一些信息,并没有为我画画.
在线之间阅读,我认为你真的想知道一般的库而不是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中这样做时相同.