直接从C+;调用D函数+; 我已经在所有的例子中,甚至在一些C++代码调用一些D代码的地方,主要的功能驻留在D中(因此,被调用的二进制是从D源文件编译的二进制)。DOC中的“C++调用”示例中有一个函数定义,它在C++中从函数条中调用,而BAR又从D.中的主函数调用。 < >从C++函数中调用D代码是可能的吗?我试图做一些简单的事情,如以下,但不断出现构建错误:

直接从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是的,这是可能的((你

在D中:

然后在C++中:

#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;
}