2012-04-08 13 views
8

DプログラムからC++関数を呼び出す方法は? 私はまだそれを行う方法を理解できません。 実行するコマンドは何ですか? 私はFedoraでdmdを使用しています。あなたがCの関数を呼び出している場合、私は、考えることができますD言語からC++(C)を呼び出す

+2

http://dlang.org/interfaceToC.htmlを参照してください。C言語でのみ動作するようですが、C++とのインターフェイス方法については、http://dlang.org/cpp_interfaceを参照してください。 html –

+0

私はそのチュートリアルを見ました。 .diファイルの記述がありませんでした。私と解決策を共有してくれているVladに感謝します。 – Stan

答えて

14

最も単純な例:

$ 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の引数をdmdに設定すると、引数をldに渡すことができます。この場合は、-lSDLを使用してSDLにリンクします。

Dインターフェイスファイル(.di)はhereと記載されています。

htodもご覧ください。

+0

それは素晴らしいです!どうもありがとうございました。できます。 .diファイルとは何ですか?私はそれについて前に読んでいない。 – Stan

+0

たとえば、libxmlを使用するには、使用する関数のバインディングを記述する必要があります。 – Stan

+1

@StanislavFeldman:誰かがそれを前にやっていない限り、そうだと思います。一般的なライブラリにはすでにDバインディングがあります。特にlibxmlが必要ですか? Dには['std.xml'](http://dlang.org/phobos/std_xml.html)モジュールがあります。また、共有ライブラリを使ったコンパイルの例も追加しました。 – Vlad

関連する問題