Java 为什么我不能叫C++;通过JVM通过DLL重写函数?

Java 为什么我不能叫C++;通过JVM通过DLL重写函数?,java,c++,Java,C++,我有一个名为“CommonUtils.lib”的staic库。它还包括一个名为“Standardconverter”的类,该类继承不在静态库中的基类“Converter” 我有另一个静态库,名为“Utils.lib”。它保存由standardconverter类继承的基类“Converter”。此库链接到一个名为“Utils.DLL”的DLL,该DLL带有一个导出函数“SendToClient”。在SendToClient()函数中,它调用 “标准转换器”(CommonUtils.lib) “U

我有一个名为“CommonUtils.lib”的staic库。它还包括一个名为“Standardconverter”的类,该类继承不在静态库中的基类“Converter”

我有另一个静态库,名为“Utils.lib”。它保存由standardconverter类继承的基类“Converter”。此库链接到一个名为“Utils.DLL”的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对象是从process Server.exe初始化和设置的。但是JVM加载的dll不知道动态对象,它总是只加载基类函数?我的理解正确吗


有人能提出一些解决这个问题的方法,并在JVM?

中调用标准转换器中的过函数,基本上只能调用来自同一C++编译器编译的代码的C++调用。您不能从其他任何地方获得该功能。这就是为什么Extn“C”的原因。“存在-以标准的方式做事,可以从其他地方使用-但你不能做任何花哨的C++东西。我发现了这个问题。问题在于从JVM实例化适配器类的静态实例。ADAPTOR实例在server.exe进程启动时实际初始化。但是静态实例在通过JVM加载的DLL中不可见。所以Adpator实例发生了重新初始化,导致服务器进程设置的标准转换器实例丢失。接下来我想知道为什么JVM的地址空间中没有visibe静态变量。期待您的建议来解决这个问题。提前谢谢。