我將C庫的頭文件轉換爲D模塊,並想知道如何處理C字符串。我應該如何處理D中的C字符串?
使用DMD 1,這個工程:
void f(char* s); // Definition for C library's function.
但使用DMD 2(我個人使用的,但我想這些模塊兩個工作)字符串常量,所以要使用獲得相同的代碼需要工作的模塊
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有效的代碼,並在版本阻止所有的代碼必須是編譯器在編譯的代碼有效代碼,即使代碼止跌」不包含在生成的可執行文件中。所以目前代碼都是在兩者中編譯的,但你必須首先修改別名,正如你可以想象的那樣,這並不理想。
再次您好。我應該付錢給你:]。 mixin技巧不起作用; '錯誤:標識符'charptr'未定義。這就說得通了;我不認爲實際上有任何使用緩衝區的功能,但我會牢記它。 re' LPCSTR':我想,我的unix敏感性會因此而過於冒犯。 'cstring'? – Bernard 2009-08-21 20:55:43
該代碼片段適合我。您是否導入了std.compiler(聲明'version_major'的模塊)? – 2009-08-21 20:59:50
我現在做了;相同的結果。 v2.0.31 – Bernard 2009-08-21 21:02:15