私はCライブラリのヘッダーファイルをDモジュールに変換していますが、どのようにC文字列を処理すべきか不思議でした。文字列がその使用して同じコードを取得するには、constのあるDでC文字列をどのように扱うべきですか?
void f(char* s); // Definition for C library's function.
しかし、DMD 2使用して(私は個人的に使用しますが、私はモジュールは、両方のために働きたい):DMD 1、この作品を使用して
必要なモジュール
void f(const(char)* s); // Definition for C library's function.
どうすればよいですか? char*
を使用して、 'クライアント'コードで文字列を何とか変更できるようにしますか?または、コードをコンパイルするコンパイラのバージョンに応じて型を変更しますか?前者の場合、それらを変更可能にする最良の方法は何ですか?私は.dupがそれをするだろうと思ったが、コンパイラはそれのバーを持っていなかった。後者の場合、私はそれをどうやってやりますか?
version (D_Version2) {
alias const(char)* charptr;
} else {
alias char* charptr;
}
void f(charptr s);
しかし、悲しいかな、DMD 2バージョンがDMD 1のための有効なコードではなく、バージョンブロック内のすべてのコードは、コードをコンパイルするコンパイラのための有効なコードでなければならない、でもコードwouldn」の場合:私はこれを試してみました結果の実行可能ファイルに含める必要があります。したがって、現在のところ、コードは両方でコンパイルされますが、あなたが想像するようにエイリアスを最初に修正する必要があります。これは理想的ではありません。
もう一度。私はあなたに支払うべきです:]。ミックスイントリックは機能しません。 'エラー:識別子 'charptr'が定義されていません。それは理にかなっている;実際にはバッファを使用する関数はないと思いますが、私はそれを念頭に置いています。 re 'LPCSTR':私のUNIXの感性はこれであまりにも怒られるでしょう、と私は思います。 'cstring'? – Bernard
コードスニペットは私にとっては役に立ちます。 'import std.compiler'(' version_major'が宣言されているモジュール)でしたか? –
私は今でした。同じ結果。 v2.0.31 – Bernard