如何在共享库中使用依赖注入(dll,so)?

时间:2011-09-16 18:57:30

标签: c++ dll dependency-injection shared-libraries

让我们说在C ++中我在共享库中有一个API,我希望在初始化时注入一些依赖。我怎么能这样做?

例如,在调用代码中:

#include "CTest1.h"
#include "CTest2.h"
...
#include "CTest15.h"

class CTest{

int att1;
int att2;

}

并在共享库中:

#include "CTest.h"

class export CSharedObject{

  void create(CTest* test){ mtest = test; }
  void doSomething(){ int sum = test->att1+test->att2; }


  CTest* mtest;

}

如何在CSharedObject中注入CTest?只是包括?但是CSharedObject将需要CTest所需的所有文件

我需要避免所有这些包括

1 个答案:

答案 0 :(得分:1)

首先,你的类需要一个接口:

class CTestIface
{
  virtual ~CTestIface(){}
  virtual void foo() = 0;
};

然后在库中添加一个实现:

class CTest1 : public CTestIface
{
  void foo(){ /*...*/ }
};

和c用于创建/删除CTest11类型的对象:

extern C{
void* Create() { return new CTest1; };
void Delete( void* o ) { delete( (CTest1*) o ); }
}

如您所见,您只需要一个定义接口的标题,以及创建/删除对象的函数。

顺便说一句,在测试中,你应该使用模拟类(继承自接口)