直接从C+;调用D函数+; 我已经在所有的例子中,甚至在一些C++代码调用一些D代码的地方,主要的功能驻留在D中(因此,被调用的二进制是从D源文件编译的二进制)。DOC中的“C++调用”示例中有一个函数定义,它在C++中从函数条中调用,而BAR又从D.中的主函数调用。 < >从C++函数中调用D代码是可能的吗?我试图做一些简单的事情,如以下,但不断出现构建错误:
在D中: 然后在C++中:直接从C+;调用D函数+; 我已经在所有的例子中,甚至在一些C++代码调用一些D代码的地方,主要的功能驻留在D中(因此,被调用的二进制是从D源文件编译的二进制)。DOC中的“C++调用”示例中有一个函数定义,它在C++中从函数条中调用,而BAR又从D.中的主函数调用。 < >从C++函数中调用D代码是可能的吗?我试图做一些简单的事情,如以下,但不断出现构建错误:,c++,interop,d,C++,Interop,D,在D中: 然后在C++中: #include <iostream> using namespace std; void CallFromCPlusPlusTest(); int main() { cout << "hello world"<<"\n"; CallFromCPlusPlusTest(); } #包括 使用名称空间std; void callfromclusplustest(); int main(){ CUT是的,这是可能的((你
#include <iostream>
using namespace std;
void CallFromCPlusPlusTest();
int main() {
cout << "hello world"<<"\n";
CallFromCPlusPlusTest();
}
#包括
使用名称空间std;
void callfromclusplustest();
int main(){
CUT是的,这是可能的((你的里程可能会根据所使用的C++编译器而不同)。
首先,您必须从C++或D侧初始化D运行时。< /P>
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;
}
#包括
使用名称空间std;
void callfromclusplustest();
外部“C”int rt_init();
外部“C”int rt_term();
int main(){
你能举一个例子来说明字符串的传递吗?那么,你的D函数会收到一个字符串,在末尾加上“-response”,然后返回该值?然后,C中的main会打印F(“RESULT=%s”,CallFromCPlusPlusTest(“request”);参见RESULT=request-response。我以您的示例为例,对其进行了极大的扩展,使其将字符串传递给D,然后以“-response”结尾将其接收回来。然后我解释了如何在XCode中加载这些内容,以便它编译D,甚至将其链接到一个目标C项目中:
#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;
}