我知道如果我有一个.a或.so文件和该库的头文件(例如SystemC),我应该 1.包含头文件 2.链接相应的库。
但是我不能只处理.dll文件,因为我也可以链接它,但是没有一个hearer文件来包含和使用命令。有人解释我是什么样的.dll-s存在以及如何使用它们?是否可以使用任何.dll文件,或者它应该是特定类型的.dll才能集成到我的应用程序中?
答案 0 :(得分:7)
DLL在功能上等同于.so文件(也称为“共享对象”或“共享库”)。您需要一个头来声明DLL中可用的函数,并且您需要链接一个库来处理加载和执行DLL调用(主要委托给操作系统)的业务。
可以使用没有任何标头的DLL。您可以直接调用Win32 API,它将动态加载DLL到您的程序虚拟地址空间,并调用其他API,它将为您提供基本上是函数指针。但是,您需要知道函数指针的签名才能正确使用,因此在这种情况下您实际执行的操作是声明实际DLL头的一小部分供您使用。
此wikipedia article可能会有所帮助,尤其是有关共享库的部分
答案 1 :(得分:3)
与Linux不同,Windows库分为两种形式:DLL(用于运行时链接)和LIB用于符号声明。 link.exe(Windows链接器)期望.lib文件解析在构建期间程序的标头使用的符号。更多信息: http://msdn.microsoft.com/en-us/library/ba1z7822(VS.71).aspx
答案 2 :(得分:0)
请注意,如果加载用C ++编译的DLL,则需要避免在对象上传递对象指针,因为它们通常不可移植。您必须保持基本的C调用和调用约定,因为这是由Windows或Linux平台ABI定义的。