「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 でオーバーライドされた関数を呼び出すための解決策を提案できますか?