• ベストアンサー

dllエクスポート時のdeclspec(dllexport)について

いつも拝見しています。 さっそくですが質問いたします。 C++の経験が浅いもので言動がおかしい箇所もあるかと思いますが、ご容赦願います。 現在dllを作成してエクスポートを行おうとしています。 エクスポートには__declspec(dllexport)を使用しています。 そこでstd::listの型を定義しているのですがビルドを行うと下記エラーメッセージが警告で発生します。 警告 14 warning C4251: 'XXXXX' : class 'std::list<_Ty>' は __export キーワードを使って class 'YYY' にエクスポートしてください。 d:\module\YYY.h 12 上記メッセージが発生していた場合は外部からdllをロードした際にエラーが発生してしまうものでしょうか? (標準ライブラリのlist定義にも何らかの形で__declspec(dllexport)を指定しなければならないのでは?と勝手に考えています。) また、上記の場合にロードエラーが発生するものだとすれば回避策はあるのでしょうか? 参考になるURL等でも結構ですのでご教授お願い致します。 実行環境 Visual C++ 2005 テストコード #include <list> class _declspec(dllexport) test { private: std::list<char> _configs; ← これがあると警告発生 public: test(void); virtual ~test(void); };

質問者が選んだベストアンサー

  • ベストアンサー
  • POTATO_XP
  • ベストアンサー率10% (24/230)
回答No.1

へぇ~、こんな内容が記載されているページがありました。 >STL コンテナの中にはエクスポートできないもの (map、set、 >queue、list、deque) がある点にも注意してください。 下にURL載せときます。面白い質問内容でした。^^)

参考URL:
http://support.microsoft.com/kb/168958/ja
sh_yasuaki
質問者

お礼

なるほど。拝見させて頂きました。 参照するにlistはdllからの受け渡しには使用できないということなんでしょうか? この参考文献を見る前に警告が出ている状態で動作の確認をしてみたのですが、dllからしっかり受け渡しが出来ているように動作してしまいました。。動作はするがメモリの管理が出来ない状態なのかよくわかりませんが。。 (受け渡しは簡単なプロパティを作成して外部から作成したlistをセットしてゲットしただけです) 動作してしまっているのがよくわからないのでもう少し調査を進めてみます。ありがとうございました。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

> STL クラスの中には、ネストしたクラスを含むものがあります。 > これらのクラスをエクスポートすることはできません。 VC6の自体はvectorがこれに該当しませんでしたが、 VC7以降はvectorも該当する実装になりましたので、 コンパイラ側が対応していないと難しそうですね。

sh_yasuaki
質問者

お礼

回答ありがとうございます。 なるほど。では私の環境ではvectorも使用できないということなんですね。。ためになる情報ありがとうございます。

関連するQ&A

専門家に質問してみよう