我认为如果我收到第三方DLL,我还应该收到以下内容:
1)具有函数原型的标题
2)静态链接库或导入库(与DLL相同的基本名称,但扩展名为.LIB)
我的困惑是我不明白如何将一个Dll链接到另一个C ++ DLL项目并构建它以正确链接依赖项。我将在哪里获得函数原型? 对于我的DLL项目,我使用.DEF文件而不使用__declspec(dlliexport)。我应该将DLL作为绝对最小值链接到我的C ++ DLL项目?
我知道目前的共识(以及我在SOF中的研究)是:
1)包含已获得外部函数原型的第三方头文件(我没有它们)。 2)通过Project Property表(在Visual Studio 2010中)添加.LIB文件。
这是要走的路吗?我需要将DLL复制到可执行文件夹吗?什么是正确的程序?当我自己尝试这样做时,有人可以帮助我吗?
更新
extern void this_is_dll_A(void); // Prints DLL_A
#include <stdio.h>
#include "Dll_A.h"
void this_is_dll_A(void)
{
printf("THIS IS DLL A\n\n\n");
}
我对Dll_A项目使用以下def文件
LIBRARY Dll_A
EXPORTS
this_is_dll_A @1
#include "Dll_A.h"
extern void this_is_dll_B(void);
我在属性表中添加了Dll_A.h头文件的include文件夹。此外,.lib文件和链接器选项中的包含文件夹。但没有DLL。
#include <stdio.h>
#include "Dll_B.h"
void this_is_dll_B(void)
{
printf("This is dll B...and...\n\n");
this_is_dll_A();
}
我将d_b.def文件用于我的Dll_B项目
LIBRARY Dll_B
EXPORTS
this_is_dll_B @1
没有进口产品?!不确定这是否正确。
在我的Dll_B项目中,我不会将Dll_A.dll
文件复制到许多网站包含SOF建议的Debug
文件夹中。
它建立得很好。问题是我不确定是否可以/应该在没有头文件的情况下执行此操作。另外,如果我要将Dll_B链接到VS2010中的可执行应用程序项目,我应该怎么做。
答案 0 :(得分:0)
您描述的构建过程是正确的 - 将DLL与第二个DLL的导入库链接。 至于运行时,两个DLL都需要在DLL搜索路径(PATH环境变量)中或与exe在同一目录中。如果找不到DLL,则不会加载您的应用程序。
还有一种使用LoadLibrary函数加载DLL的替代方法。在这种情况下,您不链接导入库,必须通过GetProcAddress手动映射所有DLL导入。此方法用于插件 - 其中所有DLL都具有已知的公开接口。