![](/img/trans.png)
[英]I can't get the input parameter of a PInvoke to C++ DLL from C# to be used as ouput with IntPtr
[英]Why dll can't be used in c++?
该答案指出了这一点:
无法链接mysql5.1.39 \\ bin \\ libmySQL.dll
但是我不明白为什么, .dll
与.lib
本质上是相同的,只是不同进程只使用一个副本。
我在用Visual C ++ 2008 Express吗?
UPDATE
有谁知道免费的工具,可以将.dll
转换为Windows中的.lib
?
你有两个错误。 首先,DLL和LIB(静态库)是完全不同的野兽。 您正在谈论的LIB(我认为)是导出库,它只是DLL中名称的列表。 该库通常在DLL编译时生成,并且如果DLL要与其他开发人员链接,则该库将与DLL一起提供。
要将DLL与现代IDE(我不使用VS)一起使用,通常在项目中包含匹配的.LIB(导出库)。 在运行时,您必须确保DLL可用于您的程序-最简单的方法是将DLL与可执行文件放在同一目录中。
其次,DLL可与C ++一起使用。
DLL是在运行时加载的特定Windows可执行文件。 在Linux中,它们的等效值为* .so。
如果您想了解DLL和静态库之间的区别, 请参见此处 。
主要原因可能与dll文件是链接器(link.exe)的输出有关。 此命令行实用程序不知道如何读取dll,仅知道如何编写它们。
实际上,有时.lib文件包含多个函数列表。 例如,libpng.lib可以作为独立文件使用,而无需任何dll文件。
为了在C / C ++中使用DLL,您需要链接到所谓的import lib 。 这是一个小.lib,其中包含DLL导出的名称/顺序(链接程序可以理解的格式)。 链接完成后,生成的二进制文件将可以使用DLL。 如果您没有适当的导入库,则您的C / C ++编译器应附带一个从DLL中生成一个的工具。
您可以使用以下类比来理解dll和lib文件之间的区别。
dll就像源.cpp文件,而lib是标头.h文件。
尽管这不是完全正确,但DLL保留了可执行代码,而LIB文件告诉链接程序如何将代码粘合在一起。
也有可能(在某些情况下)从dll生成lib 。 基本上,您需要知道的所有调用函数的方法是dll中的函数入口点,参数数量和每个参数的大小。 这样,发送相关信息就是您自己的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.