0

「CommonUtils.lib」という静的ライブラリがあります。また、スタティック ライブラリにない基本クラス「Converter」を継承する「Standardconverter」というクラスも含まれています。

「Utils.lib」という別の静的ライブラリがあります。standardconverter クラスを継承した基底クラス「Converter」を保持しています。このライブラリは、エクスポートされた関数「SendToClient」を持つ「Utils.dll」という DLL にリンクされています。SendToClient() 関数内で、オーバーライドされた関数を呼び出します

「標準コンバーター」(CommonUtils.lib)

「Utils.dll」は、JVM を介して Java クラスによってロードされます。私の問題は、StandardConverter クラスのオーバーライドされた関数を呼び出すことができなかったことです。

// Utils.lib

class Converter
{

Public:

    Converter();

    ~Converter();

    virtual void SetAdditionalData();

}



// CommonUtils.lib


class StandardConverter:public Converter
{


Public:
    StandardConverter();

    ~StandardConverter();

    void SetAdditionalData();

}


// Utils.dll

//Exported function()


__declspec( dllexport) void __stdcall SendToClient()
{


    Adaptor()->GetConverter()->SetAdditionalData(); 

}


//Server.exe

Converter *pConverter = new StandardConverter();

Adaptor()->SetConverter( pConverter  );

サーバーの始動時に、コンバーターのタイプを設定します。同じプロセスで JVM が作成され、Java クラス内で Utils.dll がロードされ、エクスポートされた関数 SendToClient() が呼び出されます。ただし、ここでは基本クラス関数を呼び出し、StandardConverter() は呼び出しません。アドレス空間の違いで起こると思います。実際には、StandardConverter オブジェクトはプロセス Server.exe から初期化および設定されます。しかし、JVM によってロードされた dll は動的オブジェクトを認識せず、常に基本クラス関数のみをロードしますか? 私の理解は正しいですか?

誰かがこの問題を解決し、JVM から standardConverter でオーバーライドされた関数を呼び出すための解決策を提案できますか?

4

0 に答える 0