如何从D程序中调用C++函数?
我应该使用哪些命令?
我正在尝试在Fedora上使用dmd
。
我能想到的最简单的例子,如果你正在调用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函数进行链接。通过dmd
的-L
参数,您可以将参数传递给ld
,在这种情况下是-lSDL
以链接SDL。
D语言文件(.di
)的描述在这里。
您还应该查看htod。
std.xml
模块。我还添加了一个使用共享库的编译示例。 - Vlad.di
。他说得对,你可以把你的签名放在.d
文件中的extern(C){...}
里。但如果有很多签名,单独使用.di
文件可能更清晰。 - Vlad