С тех пор, как я пытаюсь вызвать некоторый код D из C++ (с классом/интерфейсом, определенным для C++ и D).Совместимость C++-D
Д код
module BufferCppBinding;
extern (C++) void *createBufferCppBinding() {
BufferCppBinding ptr = new BufferCppBinding();
return cast(void*)ptr;
}
extern (C++) interface BufferCppBindingInterface {
void construct();
// ...
}
class BufferCppBinding : BufferCppBindingInterface {
public Buffer thisPtr;
public extern (C++) void construct() {
// doesn't do anything
}
}
код C++ для объявления типа в C++ земли:
class BufferCppBinding {
public:
virtual void construct();
};
для инициализации Д выполнения я написал небольшую функцию в D, которая делает в D земля:
extern (C++) void initDRuntime() nothrow{
try
{
Runtime.initialize();
//result = myWinMain(hInstance, hPrevInstance, lpCmdLine, iCmdShow);
//Runtime.terminate(&exceptionHandler);
}
catch (Throwable o)
{
//MessageBox(null, o.toString().toUTF16z, "Error", MB_OK | MB_ICONEXCLAMATION);
//result = 0;
}
}
использования (C++):
BufferCppBinding *vertexBuffer = reinterpret_cast<BufferCppBinding*>(createBufferCppBinding());
// here happens the crash
vertexBuffer->construct();
Я компилирую код с g ++ 5.2 и ldc2 и связывая его с ldc2.
Я просто получаю SIGSEGV.
Должно ли ваше объявление в C++ быть в интерфейсе D (BufferCppBindingInterface)? http://dlang.org/cpp_interface.html – TractorPulledPork