VC++でDLLとリンクするメインプログラムがあります。ヘッダーファイルの外側にあるクラスメソッドを宣言すると、DLLはすべてコンパイルされてリンクされますが、Mainはそれらにアクセスできません。ソースファイル(VC++)で定義したときにDLLメソッドがエクスポートされない
//mydll.h
#if XXX_EXPORTS
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC COrbitPropagator
{
public:
int test(double initime, std::vector<double> inivector);
}
Iは、ヘッダファイル(インラインまたはこの宣言以下)主要作品で試験方法を定義する場合。私は.CPPソースファイルで、このメソッドを定義した場合ただし、このメソッドを呼び出すときに、メインは失敗し、それがこのメッセージを出力します。
HEAP [MAIN.EXE]:RtlFreeHeapに指定された無効なアドレス(003A0000、 003C2CE8)
ランタイム(dllとmain)はどちらもDebug Multi-threaded DLLに設定されていますが、他の組み合わせを試してみました。解決策はありますか?私はすべての私のDLLコードをヘッダファイルに書くのを避けたいと思います!
EDITED: This only happens when the method uses the stl (e.g. std::vector, std::string)
まず、 'std :: vector&'という参照で 'inivector'を渡す必要があるかもしれません。しかし、エクスポートされた関数でテンプレートクラスを渡すことは悪い考えです。私はそれをしないだろう。 –
テンプレート化されたクラスをモジュールの境界を越えて渡すのは、単に問題を尋ねるだけです。私はそれが働いていたらもっと驚くだろう。 – tenfour