有一个.dll文件和一个头文件时如何使.lib文件

我正在尝试在Visual Studio中创build一个应用程序,该应用程序将能够访问已存在的.dll文件。 我需要应用程序调用例程。 我也有一个已经存在的头文件。

我一直在研究互联网,并发现我需要创build一个.lib文件。 在这里看到类似的问题,我发现了一个链接: http : //support.microsoft.com/kb/131313我不能按照指示。

该链接中的信息说,要build立一个DEF文件(我在其他地方读到,这需要编译为具有相同名称的DLL,但不知道名称是什么,与.dll文件相同的名称?)。 但是我不明白第一个方向,就是'使用DUMPBIN / EXPORTS'。 然后,我需要'stub out'function,然后是.OBJ文件(我不知道这些文件是什么)。

是否有任何一步一步的方向,类似于上面的链接,容易遵循?

您将需要Microsoft Visual C ++ 2010 Express (或任何其他MSVC命令行工具源)和您的DLL。

脚步:

  1. dumpbin /EXPORTS yourfile.dll > yourfile.exports
  2. 将所需function的名称从yourfile.exports粘贴到新的yourfile.def文件中。 在文件的顶部添加一个带有EXPORTS字样的行。
  3. VC\bin目录( lib.exe和其他编译工具所在的目录)运行以下命令。
  vcvars32.bat lib /def:yourfile.def /out:yourfile.lib 

您应该生成两个文件: yourfile.libyourfile.exp

您可以使用Digital Mars的IMPLIB工具。 它可以只使用dll创build一个lib文件,而不需要任何.def文件。

下载链接是bup.zip

命令行是:

 implib.exe /s mydll.lib mydll.dll 

您可以通过导出由应用程序代码中引用的__declspec(dllexport)在.dll文件中定义的函数/类来创build.dll文件的.lib文件,而不是通过.def创build.lib文件。

例如(伪码)

PROJECT创buildX.dll文件(比如说,X是一个DLL名称):

啊:

 // Function declaration __declspec(dllexport) void foo(void); 

A.cpp:

 // Function definition #include <Ah> void foo(void) { ; // definition } 

如果在Visual Studio中构build上述dll项目,则编译器将生成X.dll,并生成X.lib [已通过__declspec(dllexport)]导出函数foo

App.cpp:

 // Load time dynamic linking: // Application should include X.lib (not X.dll) in the project setting #include <Ah> int main() { foo(); return 0; } 

有关进一步的研究,请参阅以下链接以便更好地理解:

http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL#CppMatureApproach

http://msdn.microsoft.com/en-us/library/ms686923(v=vs.85).aspx