我正在为一个类传递消息,我想从C或C ++ main()调用D函数。我找到了许多关于从D main()调用C或C ++函数的教程,但是你如何走另一条路?
我尝试了几个资源,如https://dlang.org/spec/cpp_interface.html和https://dlang.org/spec/interfaceToC.html
extern (C++) void foo(int num)
{
//Does the FizzBuzz program
for(int i = 0; i < num; i++){
if(i%3 == 0)
writeln("fizz");
if(i%5 == 0)
writeln("buzz");
if(i%3 == 0 && num%5 == 0)
writeln("Fizzbuzz");
}
}
extern (C++) void bar();
void main()
{
bar();
}
和C ++代码
int foo(int i);
void bar()
{
foo(100);
}
谢谢您的帮助!
对于简单的事情,只需链接libphobos:
$ cat main.cpp
#include <stdio.h>
void foo(int num)
{
//Does the FizzBuzz program
for(int i = 0; i < num; i++){
if(i%3 == 0)
printf("fizz\n");
if(i%5 == 0)
printf("buzz\n");
if(i%3 == 0 && num%5 == 0)
printf("Fizzbuzz\n");
}
}
void bar();
int main()
{
bar();
return 0;
}
$ cat foobar.d
extern(C++) int foo(int i);
extern(C++) void bar()
{
foo(100);
}
$ dmd -c foobar.d
$ g++ main.cpp foobar.o -lphobos2
$ ./a.out | head
fizz
buzz
Fizzbuzz
fizz
Fizzbuzz
buzz
fizz
Fizzbuzz
fizz
Fizzbuzz
如果D代码需要D运行时工作,它会更加复杂,例如,使用垃圾收集,在这种情况下,运行时需要显式初始化。