我必须在这里相互依赖dll,我想构建它而不必构建它们两次(强制构建它们并再次重建它们以允许链接)。
这是一个例子:
**DLL A**
void fooA()
{
fooBB();
}
void fooAA()
{
fooB();
}
**DLL B**
void fooB()
{
fooA();
}
void fooBB()
{
}
有没有办法在没有市长重构的情况下构建这两个DLL?
答案 0 :(得分:1)
您可以使用LoadLibary
和GetProcAddr
查找函数的地址,然后按地址调用foo函数。
以下代码演示了如何执行此操作(您应该在实际DLL中添加错误检查):
**DLL A**
typedef void fooB(void);
typedef void fooBB(void);
fooB* fooB_ptr;
fooBB* fooBB_ptr;
HMODULE hDllB;
void init()
{
hDllB = LoadLibrary(L"DllB.dll");
fooB_ptr = reinterpret_cast<fooB*>(GetProcAddr( hDllB, L"fooB" ));
fooBB_ptr = reinterpret_cast<fooBB*>(GetProcAddr( hDllB, L"fooBB" ));
}
void done()
{
FreeLibrary( hDllB );
}
void fooA()
{
fooBB_ptr();
}
void fooAA()
{
fooB_ptr();
}
DLL B
相同。
答案 1 :(得分:0)
每次编译时,您是否真的重建了两个DLL?
如果没有,应该首次创建导入库 - 即使链接阶段由于未解析的外部因素而失败 - 并允许后续构建链接而不会出现错误...
编辑:我们店里实际上有这种依赖关系。我们的构建确实是渐进式的,干净的构建需要多次构建一些项目才能成功链接。