次の宣言が何をするのか知りたいです。MSVisual Studio Compiled コードの C コードでそれらを見てきました。
extern "C" __declspec(dllexport)
extern "C" __declspec(dllimport)
関数の外部リンケージを宣言するために使用されていることをある程度知っています(別のソースファイルで定義された関数ですが、これがどのように機能するかを詳しく知りたいです。
-アジット
このextern "C"
部分は、宣言されている項目が C リンケージを使用する必要があることを C++ コンパイラに伝えます。つまり、名前はマングルされません (または、C コンパイラと同じ方法でマングルされます)。これにより、C コードや他のほとんどの言語からアイテムをリンクできるようになります。これは、通常、C リンケージがプラットフォームで使用される標準であるためです。
__declspec(dllexport)
項目と項目は__declspec(dllimport)
、項目を DLL からエクスポート (またはインポート) する必要があることをコンパイラに伝える非標準の属性です。この__declspec()
属性は、MS コンパイラと、おそらく Windows を対象とする他のコンパイラでサポートされています。GCCがそうするかどうかはわかりません。__declspec()
(少なくとも MSVC では) で指定できるその他のストレージ クラス属性にはuuid()
、 、naked
、deprecated
およびオブジェクトまたは関数をコンパイルする方法に関する情報をコンパイラに提供するその他の属性が含まれます。