0

インターフェイス(抽象クラ​​ス)を持つメインアプリがあり、このインターフェイスにはメインアプリと外部dllの両方に実装が必要です。このインターフェイスへのポインターを使用してメソッドにアクセスするため、何らかの条件に基づいて実装のいずれかのアドレスにポインターを割り当てます。

これはどのように達成できますか?

解決策としてマークされた回答が言うスタックオーバーフローで質問に出くわしました

メインアプリのインターフェース

class IModule
{
    public:
    virtual ~IModule(); // <= important!
    virtual void doStuff() = 0;
};

メインアプリに実装可能

class ActualModule: public IModule
{
    /* implementation */
};

また、dll から関数をエクスポートして、dll の実装へのポインタを返すことができます

__declspec (dllexport) IModule* CreateModule()
{
    // call the constructor of the actual implementation
    IModule * module = new ActualModule();
    // return the created function
    return module;
}

dll はIModuleのようなものが存在することをどのように知るようになるのでしょうか?

IModuleexternとしてマークし、dll で使用できますか?

4

1 に答える 1

1

「IModule のようなものが存在することを dll はどのように認識するのですか?」

dll コードには、IModule が宣言されているヘッダー ファイルが含まれるためです。ヘッダー ファイルは、異なるソース ファイル間で宣言を共有する方法です。DLL はこれに違いはなく、IModule を extern としてマークする必要はありません。

ところで私はこれをします

virtual ~IModule() {} // <= important!
于 2012-11-16T07:30:10.227 に答える