构建两个相互依赖的dll

时间:2009-07-16 12:35:34

标签: c++ windows dll dependencies compilation

我必须在这里相互依赖dll,我想构建它而不必构建它们两次(强制构建它们并再次重建它们以允许链接)。

这是一个例子:

**DLL A**

void fooA()
{
  fooBB();
}
void fooAA()
{
  fooB();
}

**DLL B**

void fooB()
{
  fooA();
}

void fooBB()
{
}

有没有办法在没有市长重构的情况下构建这两个DLL?

2 个答案:

答案 0 :(得分:1)

您可以使用LoadLibaryGetProcAddr查找函数的地址,然后按地址调用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?

如果没有,应该首次创建导入库 - 即使链接阶段由于未解析的外部因素而失败 - 并允许后续构建链接而不会出现错误...

编辑:我们店里实际上有这种依赖关系。我们的构建确实是渐进式的,干净的构建需要多次构建一些项目才能成功链接。