All pastes #386811 Raw Edit

Untitled

public cpp v1 · immutable
·published 2007-03-08 22:06 UTC
rendered paste body
#include <dlfnc.h>#include <iostream>using namespace std;class MyModule {   virtual void Print() {}};typedef MyModule* EntryArea();typedef void DestroyArea(MyModule*);struct MyStruct {	MyModule* Object;        void* DLHandle;        EntryArea* Entry;        DestroyArea* Delete;};class ParentClass {	private:	struct MyStruct Classes[5];	string Shared; 	public:	void Load() {           Shared = "./test.so";           Classes[0].DLHandle = dlopen(Shared.c_str(),RTLD_NOW);           Classes[0].Entry = (EntryArea*) dlsym(Classes[0].DLHandle,"create");           Classes[0].Delete = (DestroyArea*) dlsym(Classes[0].DLHandle,"destroy");           Classes[0].Object = Classes[0].Entry();        }        MyModule* GetObject() {           return Classes[0].Object;        }};int main() {	ParentClass clClass;	MyModule* Child;	clClass.Load();        Child = clClass.GetObject();}  ---- contents of test.so ---- #include <iostream>using namespace std;typedef MyModule* EntryArea();typedef void DestroyArea(MyModule*);struct MyStruct {	MyModule* Object;        void* DLHandle;        EntryArea* Entry;        DestroyArea* Delete;};class MyModule {   virtual void Print() {}};class TestModule : public MyModule {          public:          void Print() {             cout << "Test" << endl;          }};extern "C" MyModule* create() {    return new TestModule();}extern "C" void destroy(MyModule* m) {    delete m;}