3
自從我嘗試從C++調用一些D代碼(爲C++和D定義類/接口)以來。C++到D的互操作性
的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的運行時的初始化i的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