2012-01-15 1 views
7

__declspec(dllexport)に相当するD2言語は何ですかdmdでD2言語をコンパイルするときにDLLから変数をエクスポートする方法は?

私はD2 DLLリンケージexample codeを持っています。 dmdのmangledネームスペースと標準のu-mangled "C"ネームスペースの両方のエクスポート関数は、魅力的に機能します。しかし、私は(グローバル)int変数の共有については、主なexeプログラムだけでなく、DLLの間の変数を共有しています...私はdepends22_x86でDLLのシンボルテーブルをチェックし、私は輸出を使用する点を作ったVarの宣言の直前にあるディレクティブは、DLLのテーブルには表示されません。 Digital Marsのdmdツールチェーンを使用してVariblesをDLLに書き出すことはできますか?グローバル変数をエクスポートまたはインポートすると動作しない場合、あなたはたぶんDからC.

+3

__gsharedを使用していないことを確認してください。 – Trass3r

+1

多くの他の言語/コンパイラは変数のエクスポートをサポートしていません。変数のエクスポートは、関数が問題なく動作する多くのシナリオ(遅延リンク)で失敗するため、とにかく脆いものです。なぜあなたの変数にゲッター/セッター関数を書くことができないのですか? – 0xC0000022L

答えて

0

、 Ralph Tandetzkyが言うが、静的なモジュールのctorで行うことができます。明示的に関数を呼び出す必要はなく、すべてのシンボルがロードされます。たぶん__gsharedも高く評価されます。

0

にエクスポートする場合は、フォーム

Type variable; 

extern(C) Type * getGlobalVariable() 
{ 
    return &variable; 
} 

のラッパー関数を書く回避策として

1

これはコンパイラのバグでした(Bugzilla 10059)。 次のコードは今動作するはずです。

export __gshared int foo; 
関連する問題