如何正确地将Kotlin类返回回调С++;? 有一个共享的ADIN库和一个用C++编写的主程序。

如何正确地将Kotlin类返回回调С++;? 有一个共享的ADIN库和一个用C++编写的主程序。,kotlin,kotlin-native,Kotlin,Kotlin Native,标题附件h: class IAddIn { public: virtual const char* Test()= 0; }; 图书馆: #include "addin.h" class AddIn : IAddIn { public: const char* Test() { return "libC test ok"; } }; int GetClassObject(IAddIn** pInterface

标题附件h:

class IAddIn {
public:
    virtual const char* Test()= 0;
};
图书馆:

#include "addin.h"

class AddIn : IAddIn {
public:
    const char* Test() {
        return "libC test ok";
    }

};

int GetClassObject(IAddIn** pInterface)
{
    if (!*pInterface)
    {
        *pInterface = (IAddIn*) new AddIn();
        //return (long)*pInterface;
    }

    return 0;
}
主要内容:

但是没有调用Test函数。内存访问错误

Kotlin类如何存储在内存中?如何使它像传递给回调的C++类一样存储在内存中

GitHub回购:

#include "addin.h"
#include <stdio.h>
#include <windows.h>

// DLL function signature
typedef int (*_getClassObject)(void*);
int TestAddIn(const char* dllname);

int main(){
    int errC = TestAddIn("addinC.dll");
    return errC;
}

int TestAddIn(const char* dllname){

    _getClassObject GetClassObject;
    HINSTANCE hinstLib;

    // Load DLL file
    hinstLib = LoadLibrary(TEXT(dllname));
    if (hinstLib == NULL) {
        printf("ERROR: unable to load DLL %s\n", dllname);
        return 1;
    }
    // Get function pointer
    GetClassObject = (_getClassObject)GetProcAddress(hinstLib, "GetClassObject");
    if (GetClassObject == NULL) {
        printf("ERROR: unable to find DLL function GetClassObject\n");
        FreeLibrary(hinstLib);
        return 1;
    }

    IAddIn* addin = 0;

    GetClassObject(&addin);
    const char* testStr = addin->Test();
    puts(testStr);

    return 0;
}
import kotlinx.cinterop.*

class AddInClass{
    fun Test():String{
        return "Kotlin test ok"
    }
}

@CName("GetClassObject")
fun GetClassObject(pInterface: COpaquePointerVar): Int
{
    val adding = AddInClass()
    val stableRef = StableRef.create(adding)
    pInterface.value = stableRef.asCPointer()

    return 0
}