0

我有一个名为“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中的覆盖函数吗?

4

0 回答 0