如何正确地将Kotlin类返回回调С++;? 有一个共享的ADIN库和一个用C++编写的主程序。
标题附件h:如何正确地将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
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
}