我有一个名为“CommonUtils.lib”的静态库。它还包括一个名为“Standardconverter”的类,它继承了一个不在静态库中的基类“Converter”。
我有另一个名为“Utils.lib”的静态库。它拥有由标准转换器类继承的基类“转换器”。该库链接到一个名为“Utils.dll”的 DLL,并带有一个导出函数“SendToClient”。在 SendToClient() 函数内部,它在
“标准转换器”(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中的覆盖函数吗?