ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:sh_yasuaki 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);
};
質問投稿日時:08/05/02 17:33
質問番号:3992590
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答10pt

回答者:MrBan > STL クラスの中には、ネストしたクラスを含むものがあります。
> これらのクラスをエクスポートすることはできません。

VC6の自体はvectorがこれに該当しませんでしたが、
VC7以降はvectorも該当する実装になりましたので、
コンパイラ側が対応していないと難しそうですね。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/03 01:24
回答番号:No.2
この回答へのお礼回答ありがとうございます。
なるほど。では私の環境ではvectorも使用できないということなんですね。。ためになる情報ありがとうございます。

回答

良回答20pt

回答者:POTATO_XP へぇ〜、こんな内容が記載されているページがありました。

>STL コンテナの中にはエクスポートできないもの (map、set、
>queue、list、deque) がある点にも注意してください。

下にURL載せときます。面白い質問内容でした。^^)
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/02 19:33
回答番号:No.1
参考URL: http://support.microsoft.com/kb/168958/ja
この回答へのお礼なるほど。拝見させて頂きました。
参照するにlistはdllからの受け渡しには使用できないということなんでしょうか?

この参考文献を見る前に警告が出ている状態で動作の確認をしてみたのですが、dllからしっかり受け渡しが出来ているように動作してしまいました。。動作はするがメモリの管理が出来ない状態なのかよくわかりませんが。。
(受け渡しは簡単なプロパティを作成して外部から作成したlistをセットしてゲットしただけです)

動作してしまっているのがよくわからないのでもう少し調査を進めてみます。ありがとうございました。
 
最新から表示回答順に表示良回答のみ表示