请看一下代码示例。
- A.dll 将使用 B.dll 中的 B 类
- b 是 A 类的私有成员
现在,有一个模块C(C.dll或C.exe),C可以访问模块A但不能访问模块B。但是我们希望C可以调用B的方法,我该如何调整我们的设计来接近它?
我们无法修改 B.dll,因为它是第 3 方模块
我们可以对A类做一些改变,我们不想暴露A中的2个方法来直接调用B方法(我认为这不是一个好的设计)
A::B_methods1() { b->B_methods1() }
A::B_methods2() { b->B_methods2() }
而且我们也不想直接暴露私有数据成员 b,例如
const B* A::getB() { return b; }
有什么想法吗?多谢。
添加一些评论:
构建B的实例非常复杂(或者需要一些特殊的参数)。我们只能使用A来构建B。所以,如果C要访问/调用B的函数,C必须通过A来使用。
Module A.dll
class A
{
public:
A ();
virtual ~A();
private:
B* b;
}
Module B.dll
#ifdef SDK_DLL
#define HLAPI __declspec(dllexport)
#else
#define HLAPI __declspec(dllimport)
#endif
class HLAPI B
{
public:
B ();
virtual ~B();
public:
B_method1();
B_method2();
}