[解決済み] __declspec(dllimport) の本当の意味は何ですか?
質問
Qtのソースコードを見ると、このようになっています。
class Q_CORE_EXPORT QBasicAtomicInt
{
public:
...
};
どの
Q_CORE_EXPORT
マクロは以下のように定義します。
define Q_DECL_IMPORT __declspec(dllimport)
では
__declspec(dllimport)
は本当に意味があるのでしょうか?
どのように解決するのですか?
__declspec
は Microsoft 固有の属性で、ストレージクラス情報を指定することができます。
(Nitpicker's Corner。しかし、他の多くのコンパイラー ベンダー (たとえば GCC) は、Microsoft のコンパイラーをターゲットとして書かれたコードのインストール ベースとの互換性のために、この言語拡張を現在サポートしています。中には追加のストレージクラス属性を提供するものさえあります)。
指定可能なストレージクラス属性は以下の 2 つです。
dllimport
と
dllexport
. これらは、関数やオブジェクトがDLLからインポートまたはエクスポートされていることをコンパイラに示すものです(それぞれ)。
より具体的には、これらはモジュール定義(
.DEF
) ファイルを必要としません。ほとんどの人は、DEF ファイルを作成するよりもこれらの言語拡張を使用する方がはるかに簡単であることに気づきます。
明らかな理由で
__declspec(dllimport)
と
__declspec(dllexport)
は一般に対になっています。あなたは
dllexport
を使ってDLLからエクスポートされたシンボルをマークし
dllimport
を使って別のファイルにそのエクスポートされたシンボルをインポートします。
このため、一般に DLL のコンパイル時と DLL のインターフェイスを使用するクライアント コードの両方で同じヘッダー ファイルが使用されるため、コンパイル時に適切な属性指定子に自動的に解決するマクロを定義するのが一般的なパターンとなっています。例えば
#if COMPILING_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
そして、エクスポートされるべきシンボルをすべて
DLLEXPORT
.
おそらくは、それが
Q_CORE_EXPORT
マクロが行うもので、どちらかというと
Q_DECL_IMPORT
または
Q_DECL_EXPORT
.
関連
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み] int argc, char *argv[] とはどういう意味ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】デバッグアサーションに失敗しました