我在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 - >输入 - >附加依赖。
我错过了一些神奇的链接器命令行开关吗?
答案 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
的一堆引用。