STLコンテナをDLL境界に公開するのは良い考えではありませんが、一般的には不可能です(this answer for whyおよびthis oneを参照してください。境界)。私は別の(VC08/VC10 +)コンパイラでコンパイルされたDLLとEXEの間でデータを渡すことができる必要があります。 this Qは、すべてが同じであることのみを処理します。dll境界にstd :: vectorを公開する - コンパイラの独立性のベストプラクティス
公開するにはどうすればよいですか?ベクトルは、メモリが連続していることが保証されている点でリストとは少し異なります。したがって、複素数のconstベクトルが必要な場合は、ブロックの開始ポインタと終了ポインタをdllの関数に渡すだけですか? dllはまた、ベクトルの配列のようないくつかの構造体を返す必要があります。
私は、開始および終了ポインタを含む構造体について疑問に思った:
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
それが賢明でしょうか?おそらく関数から返されるものには、それが指しているものを破壊するデストラクタ(dll側で)が必要になるでしょう。
関連するお読みください:http://stackoverflow.com/questions/5661738/common-practice-in-dealing-with-warning-c4251-class-needs-to-have-dll-inter/5664491#5664491 –
Cheers @JohnDibling、それはSTLコンテナを直接公開しない理由の良い説明です。したがって、データそのものを公開する方法の問題。私は連続した要求がそれ以上のコピーをせずに可能になることを望んでいる。 –
単純な古い配列を渡すだけではどうですか? – Rook