こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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);
};

投稿日時 - 2008-05-02 17:33:16

QNo.3992590

すぐに回答ほしいです

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

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

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

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

参考URL:http://support.microsoft.com/kb/168958/ja

投稿日時 - 2008-05-02 19:33:11

お礼

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

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

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

投稿日時 - 2008-05-07 14:49:03

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

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

投稿日時 - 2008-05-03 01:24:25

お礼

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

投稿日時 - 2008-05-07 14:53:07

あなたにオススメの質問