2

2 つの dll を生成する 2 つの vc++ dll プロジェクトがあります。あ

vector<vector<string>> 

オブジェクトは、ある dll から別の dll に渡されます。どちらのプロジェクトも、マルチスレッド デバッグ DLL として構成されています。どちらも vc++ 2008 および vc++ 2010 で正常にコンパイルできます。ただし、vc++ 2008 プロジェクトから生成された dll のみが機能します。dll は、MSDEV バージョン 6.0 でコンパイルされた別の dll によって使用されます。だから私の質問はなぜ

vector<vector<string>>

vc++ 2010 でビルドされた dll 間でオブジェクトを渡すことはできませんか? どうも:)

4

2 に答える 2

8

DLL とそれを使用するコードに異なるコンパイラ バージョンを使用する予定がある場合、DLL インターフェイスで STL 型を使用することはできません。

vector と string の実装は異なる場合があり (そして、あなたの場合はそうであるように見えます)、このような問題が発生します。

于 2012-06-14T07:31:16.333 に答える
0

VC ++ 2010は、新しいC ++ 11標準を使用します。これには、ベクトルなどのテンプレートコンテナーへの大きな変更が含まれます(最初に、右辺値参照と移動セマンティクスを使用します)。

そのようなライブラリを共有している場合、一般的に最も安全なオプションは、すべてに対して単純で退屈な標準のCインターフェイス関数を作成することです。結局のところ、これらはほとんどどこでも機能します。その後、内部実装は、適切と思われる方法で実行できます。

于 2012-06-14T07:36:28.987 に答える