- ベストアンサー
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); };
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
へぇ~、こんな内容が記載されているページがありました。 >STL コンテナの中にはエクスポートできないもの (map、set、 >queue、list、deque) がある点にも注意してください。 下にURL載せときます。面白い質問内容でした。^^)
その他の回答 (1)
- MrBan
- ベストアンサー率53% (331/615)
> STL クラスの中には、ネストしたクラスを含むものがあります。 > これらのクラスをエクスポートすることはできません。 VC6の自体はvectorがこれに該当しませんでしたが、 VC7以降はvectorも該当する実装になりましたので、 コンパイラ側が対応していないと難しそうですね。
お礼
回答ありがとうございます。 なるほど。では私の環境ではvectorも使用できないということなんですね。。ためになる情報ありがとうございます。
お礼
なるほど。拝見させて頂きました。 参照するにlistはdllからの受け渡しには使用できないということなんでしょうか? この参考文献を見る前に警告が出ている状態で動作の確認をしてみたのですが、dllからしっかり受け渡しが出来ているように動作してしまいました。。動作はするがメモリの管理が出来ない状態なのかよくわかりませんが。。 (受け渡しは簡単なプロパティを作成して外部から作成したlistをセットしてゲットしただけです) 動作してしまっているのがよくわからないのでもう少し調査を進めてみます。ありがとうございました。