我有一个名为“CommonUtils.lib”的staic库。它还包括一个名为“Standardconverter”的类,它继承了一个不在静态库中的基类“Converter”。
我有另一个名为“Utils.lib”的静态库。它包含由standardconverter类继承的基类“Converter”。该库链接到名为“Utils.dll”的DLL,其导出函数为“SendToClient”。在SendToClient()函数内部,它调用
中的重写函数“StandardConverter”(CommonUtils.lib)
'Utils.dll'是由java类通过JVM加载的,我的问题是我无法调用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中的覆盖函数吗?