有一个.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。
脚步:
dumpbin /EXPORTS yourfile.dll > yourfile.exports
- 将所需function的名称从
yourfile.exports
粘贴到新的yourfile.def
文件中。 在文件的顶部添加一个带有EXPORTS
字样的行。 - 从
VC\bin
目录(lib.exe
和其他编译工具所在的目录)运行以下命令。
vcvars32.bat lib /def:yourfile.def /out:yourfile.lib
您应该生成两个文件: yourfile.lib
和yourfile.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