プロが教える店舗&オフィスのセキュリティ対策術

いつも拝見しています。
さっそくですが質問いたします。

C++の経験が浅いもので言動がおかしい箇所もあるかと思いますが、ご容赦願います。

現在dllを作成してエクスポートを行おうとしています。
エクスポートには__declspec(dllexport)を使用しています。
そこでstd::listの型を定義しているのですがビルドを行うと下記エラーメッセージが警告で発生します。

警告14warning C4251: 'XXXXX' : class 'std::list<_Ty>' は __export キーワードを使って class 'YYY' にエクスポートしてください。
d:\module\YYY.h12

上記メッセージが発生していた場合は外部から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);
};

A 回答 (2件)

へぇ~、こんな内容が記載されているページがありました。



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

下にURL載せときます。面白い質問内容でした。^^)

参考URL:http://support.microsoft.com/kb/168958/ja
    • good
    • 0
この回答へのお礼

なるほど。拝見させて頂きました。
参照するにlistはdllからの受け渡しには使用できないということなんでしょうか?

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

動作してしまっているのがよくわからないのでもう少し調査を進めてみます。ありがとうございました。

お礼日時:2008/05/07 14:49

> STL クラスの中には、ネストしたクラスを含むものがあります。


> これらのクラスをエクスポートすることはできません。

VC6の自体はvectorがこれに該当しませんでしたが、
VC7以降はvectorも該当する実装になりましたので、
コンパイラ側が対応していないと難しそうですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/07 14:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!