如何将库静态链接到DLL?

时间:2015-06-09 16:44:12

标签: c++ visual-studio dll

我在DLL地狱。我有2个DLL,让我们说A.dll和B.dll有一个名称冲突 - 每个都使用相同的C ++类名,等等。这两个DLL都可用作静态库。

我可以创建一个'wrappe'DLL,比如Aprime.dll导出类似于A.dll中的类,方法等,并将该功能委托给A.lib中的类,但静态链接到Aprime .dll文件?这不会避免名称冲突吗?

我一直在尝试这个,但不确定我是否正确设置了MSVS项目。 Aprime.dll正在生产,但根据Dependency Walker Aprime.dll仍在加载A.dll。

我一直在搜索,但我发现的大多数内容仅适用于CRT或MFC中的静态链接,它们都有自己的开关。

我在链接器下添加了A.lib - >输入 - >附加依赖。

我错过了一些神奇的链接器命令行开关吗?

2 个答案:

答案 0 :(得分:0)

是的,该方法应该有效。关键是确保您不在Aprime.dll头文件中包含任何原始A.dll头文件。否则,如果某人包含Aprime.h / pp,那么它将包含A.h / pp,然后您将再次发生冲突。

所以你想要这样的东西:

A.H

// Library A includes
class test
{
};

B.h

// Library B includes
class test
{
}

Aprime.h

// Proxy class
class myTest
{
}

Aprime.cpp

#include "A.h"
#include "Aprime.h"

...

的main.cpp

#include "Aprime.h"
#include "B.h"

...

请注意,main永远不包括A和B.仅包括Aprime和B. B仍然是静态lib,而Aprime是DLL。

答案 1 :(得分:0)

是的,您可以通过Windows very low level获得支持。 Aprime.DLL实际上是空的,除了对A.DLL的一堆引用。