从D语言调用C ++(C)

时间:2012-04-08 12:21:11

标签: c++ c d

如何从D程序调用C ++函数? 我仍然无法理解如何做到这一点。 我需要执行哪些命令? 我在Fedora中使用dmd。

1 个答案:

答案 0 :(得分:14)

我能想到的最简单的例子,如果你正在调用C函数:

$ cat a.c
int f(int a, int b){
    return a + b + 42;
}
$ cat a.di
extern (C):
int f(int, int);
$ cat b.d
import std.stdio;
import a;
void main(){
    writeln( f( 100, 1000) );
}
$ gcc -c a.c
$ dmd b.d a.o
$ ./b
1142
$ 

如果你正在使用共享对象,你可以这样:

$ cat sdltest.di
module sdltest;

extern (C):

struct SDL_version{
    ubyte major;
    ubyte minor;
    ubyte patch;
}

SDL_version * SDL_Linked_Version();

$ cat a.d
import std.stdio;
import sdltest;

void main(){
    SDL_version *ver = SDL_Linked_Version();
    writefln("%d.%d.%d", ver.major, ver.minor, ver.patch);
}

$ dmd a.d -L-lSDL
$ ./a
1.2.14
$ 

在此示例中,我使用SDL函数进行了链接。 -L的{​​{1}}参数允许您将参数传递给ld,在这种情况下为dmd以与SDL链接。

D接口文件(-lSDL)描述为here

您还应该查看htod