1

ACE_Service_ObjectまたはACE_Shared_Objectを使用しようとしています。どちらが当てはまるかわかりません。DLLのコンシューマーがライブラリを開き、エクスポートされたクラスのインスタンスを作成し、クラスでいくつかの関数を呼び出してから、クラスを破棄するように、いくつかの機能をDLLにカプセル化しようとしています。ある種の基本的なプラグインアーキテクチャ。ACEクラスを使用してこれを実行するための最良の方法は何でしょうか。それらは、DLLのロード、ルックアップ、およびアンロードの特徴の多くをラップしているように見えます。これは、使用すると便利です。

以下のコードは、基本的にACEクラスを使用して模倣したいものです。

void* handle = dlopen("./libdllbaseclass.so", RTLD_LAZY);

DllBaseClass* (*create)();
void (*destroy)(DllBaseClass*);

create = (DllBaseClass* (*)())dlsym(handle, "create_object");
destroy = (void (*)(DllBaseClass*))dlsym(handle, "destroy_object");

DllBaseClass* myClass = (DllBaseClass*)create();
myClass->DoSomething();
destroy( myClass );
4

1 に答える 1

2

共有ライブラリ内のいくつかの関数をロード、アンロード、および呼び出すだけでよい場合は、代わりにACE_DLLクラスを使用できます。これが、ACE_Shared_Objectが内部で使用することになるものです。

于 2010-03-09T16:25:38.383 に答える