有没有办法从C或C ++ main()调用D函数?

问题描述 投票:1回答:1

我正在为一个类传递消息,我想从C或C ++ main()调用D函数。我找到了许多关于从D main()调用C或C ++函数的教程,但是你如何走另一条路?

我尝试了几个资源,如https://dlang.org/spec/cpp_interface.htmlhttps://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);
}

谢谢您的帮助!

d
1个回答
1
投票

对于简单的事情,只需链接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运行时工作,它会更加复杂,例如,使用垃圾收集,在这种情况下,运行时需要显式初始化。

© www.soinside.com 2019 - 2024. All rights reserved.