我经历了http://dlang.org/cpp_interface.html,在所有的例子中,即使是那些C ++代码调用某些D代码的代码,主函数也存在于D中(因此调用的二进制文件是从D源文件)。文档中的“从C ++调用D”示例中有一个在D中定义的函数foo,它从C ++中的函数栏调用,而bar又从D中的main函数调用。
是否可以从C ++函数调用D代码?我正在尝试做一些简单的事情,如下所示,但不断出现构建错误:
在D:
import std.stdio;
extern (C++) void CallFromCPlusPlusTest() {
writeln("You can call me from C++");
}
然后在C ++中:
#include <iostream>
using namespace std;
void CallFromCPlusPlusTest();
int main() {
cout << "hello world"<<"\n";
CallFromCPlusPlusTest();
}
答案 0 :(得分:7)
是的,有可能,(您的里程可能因使用的C ++编译器而异。)
首先,您必须从C ++或D端初始化D运行时。
cpptestd.d:
import std.stdio;
extern (C++) void CallFromCPlusPlusTest() {
/*
* Druntime could also be initialized from the D function:
import core.runtime;
Runtime.initialize();
*/
writeln("You can call me from C++");
//Runtime.terminate(); // and terminated
}
编译: dmd -c cpptestd.d
cpptest.cpp:
#include <iostream>
using namespace std;
void CallFromCPlusPlusTest();
extern "C" int rt_init();
extern "C" int rt_term();
int main() {
cout << "hello world"<<"\n";
rt_init(); // initialize druntime from C++
CallFromCPlusPlusTest();
rt_term(); // terminate druntime from C++
return 0;
}
编译并链接: g ++ cpptest.cpp cpptestd.o -L / path / to / phobos / -lphobos2 -pthread
这适用于Linux。