为什么我不能通过JVM通过DLL调用C ++重写函数?

时间:2013-06-10 06:08:36

标签: java c++

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

0 个答案:

没有答案