跨DLL共享C ++类

时间:2013-11-26 19:40:24

标签: c++ dll

简单地说,我有一个需要在DLL之间共享的类库。我想避免将该库导出到单独的DLL中,如果可能的话。

更具体地说,我有一个扩展应该实现的通用接口,并为派生类提供工厂。通过使用纯虚拟类创建公共头文件,这很容易做到。但是,所有派生类都将共享一些实现细节,我希望将它们包含在基类定义中以避免代码重复。

这是一个到目前为止在VC2010中似乎有用的具体示例,但我想确保在涉及不同的编译器时它不会中断。

两个模块共享以下两个文件:

// Object.h
class Object
{
protected:
  int x;
public:
  Object();
  virtual int Foo() = 0;
  void Bar();
};
typedef Object* (*ObjectFactory)();

// Object.cpp
Object::Object()
{
  x = 0;
}
void Object::Bar()
{
  x++;
}

图书馆主要cpp:

#include <windows.h>
#include "object.h"

class Derived : public Object
{
public:
  int Foo()
  {
    return x + 1;
  }
};

extern "C" __declspec(dllexport) Object* CreateObject()
{
  return new Derived;
}

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved)
{
  return TRUE;
}

主要模块:

#include <windows.h>
#include "object.h"

int main()
{
  HMODULE module = LoadLibrary("test_dll.dll");
  ObjectFactory factory = (ObjectFactory) GetProcAddress(module, "CreateObject");
  Object* o = factory();
  o->Bar();
  int x = o->Foo(); // returns 2, as expected
  FreeLibrary(module);

  return 0;
}

0 个答案:

没有答案