今日、私はDプログラミングについて聞きましたが、それはCコードと互換性があります。それにもかかわらず、DからGTKやPortAudioのようなCライブラリを使用することが可能かどうかについての情報はありませんでしたか? 可能であれば、これを行う方法を説明できますか?DのCライブラリの使い方は?
答えて
DからCライブラリを呼び出すことができます。CヘッダファイルをDに変換する必要があります。ほとんどの場合、これはかなり簡単で、難しいです。command-line toolプロセスを自動化します。おもちゃの例以外は私のためには本当に働いたことはありませんが、行う必要がある変形の種類を見るのは良いスタートになるかもしれません。スニペットを置くだけで、ヘッダー自体に翻訳するのが難しくなり、htodがそれで何をするのか見ることができます。
あなたが通常直面する最大の問題は、Cプリプロセッサの独創的な使用です。いくつかはDのversion()ステートメントに変換できますが、すべてではありません。
実際にコードをコンパイルしてリンクするのは、UNIX系のプラットフォームでは、GCCを使用してCコードでコンパイルしてリンクすることができると思います。 Windowsでは、DMCを使用してCファイルをコンパイルし、DMDとリンクする必要があります。または、それを可能にする任意のコンパイラを使用してCコードをDLLにコンパイルし、DMDとリンクするには、DLLからDMD互換のインポートライブラリを作成する必要があります。これは、DigitalMarsから入手可能な無料のBasic Utilities Packageにあるimplibツールを使用して行うことができます。
すでにこれらのヘッダー変換が多数行われています。最初にDsourceのBindingsプロジェクトを参照するか、GTKヘッダーの翻訳のような大きなものに着手する前に、デジタルマルサスのDニュースグループを最初に尋ねると便利です。
DコードはCオブジェクトファイルとリンクでき、C DLLと対話できますが、使用するCヘッダーファイルからDモジュールを生成する必要があります。その公式Dウェブサイトには、そのことを行うためのa guideがあります。
がhttp://dsource.org を見てみましょうあなたはあなたがCバインディングを記述する必要が
で始める取得するために役立つかもしれない多くのプロジェクトがあります:GTKのような人気のライブラリの多くは、すでに(GTKD例えばここでは)ラップされています。 This answer説明方法
人気のある代替方法は、実行時にライブラリをロードすることです。ここでのlibpngをロードしてのlibpng関数を呼び出す方法の例です:
module libpngtest;
import std.stdio;
import core.sys.posix.dlfcn;
alias uint function() png_access_version_number_t;
int main() {
auto lib = dlopen("libpng.so".ptr, RTLD_LAZY | RTLD_LOCAL);
if (lib is null) {
writeln("EEEK!");
writeln(to!string(dlerror()));
return -1;
} else {
writeln("WOOT!");
auto png_access_version_number = cast(png_access_version_number_t)dlsym(lib, "png_access_version_number");
writeln(png_access_version_number());
}
if (dlclose(lib) == 0) {
return 0;
} else {
return -1;
}
} // main() function
// compile: dmd libpngtest.d -L-ldl
// run: ./libpngtest
はそれをテストするためにDPasteを使用します。http://www.dpaste.dzfl.pl/917bc3fb
- 1. DライブラリをC++コードにリンクする
- 2. Ignorable = "d"の使い方
- 3. C - LinuxでのAPIライブラリの使い方
- 4. Dの画像処理ライブラリ?
- 5. Javaライブラリの使い方は?
- 6. Jansiライブラリの使い方は?
- 7. アンドロイドのc/cppライブラリ/関数の使い方
- 8. Rails 3.1では、 "lib"ディレクトリのライブラリはもはや "必要" d
- 9. C(C++ではない)の例外ライブラリ
- 10. SQL ServerのA $$$ B $$$$$$ C $$$$$$$$ D文字列からA $ B $ C $ DまたはA%B%C%Dを取得するにはどうすればよいですか?
- 11. D標準ライブラリの現在の状態は?
- 12. バイトパラダイムcライブラリの使用
- 13. JNI/Cライブラリのデバッグ方法は?
- 14. FFmpegライブラリの使い方/作成方法
- 15. C/D線画パッケージ
- 16. Yahoo!の使い方oauth-phpライブラリのAPI?
- 17. CのNIのライブラリのVIsの使用方法
- 18. DのC#スタイル名の演算子?
- 19. DとD:の違いは何ですか?
- 20. Google GoとSQLite:使用するライブラリとその使い方は?
- 21. %dをcで印刷するには
- 22. C++での文字列ライブラリの使用
- 23. Cプログラムでの外部ライブラリの使用
- 24. C "%dの" 書式指定子
- 25. GCCを使ってCでライブラリをコンパイルする方法は?
- 26. Dと一緒に働くbignumライブラリは何ですか?
- 27. Dのガベージコレクション、ポインタとスコープD
- 28. d [count]とd [count]の差
- 29. Dの時間比較D
- 30. のC#ライブラリ