私はVS 2010 C++ソリューションを2つのプロジェクトに持ちます.1つはDLLを生成し、もう1つはDLL関数のドライバです。次のコードはすべてstd :: stringはDLLで値を割り当てることができません
char cstring [256];
strcpy (cstring, "C String");
std::string string1 = "Test String";
std::string string2 (string1);
std::string string3;
string3.assign (cstring);
がドライバでうまくいきます。しかし、同じコードがDLLプロジェクトのどこにでも置かれていれば、string1、string2、およびstring3のいずれも、どの値でもうまく割り当てられません。ほとんどの場合、デバッガはBad Ptrと表示します。彼らはメモリにうまく割り当てられていないように見えます。
クラスメンバーフィールド、自動変数、および静的変数としてstd :: stringを配置しようとしました。しかし、いずれの方法も期待どおりに機能しません。誰かが原因を見つけるのを助けることができますか?
標準的なDLLの問題は、DLLとEXEがまったく同じ標準C++ライブラリを使用しない場合に発生します。デバッグでビルドされたEXEほどシンプルなので、msvcp100d.dllとReleaseでビルドされたDLLを使用してmsvcp100.dllを使用します。/MDの代わりに/ MTを使用してビルドするのはもう一つの伝統的な間違いです。どちらのプロジェクトも* exact *同じコンパイラバージョンとビルド設定を使用して、ライブラリの1つのコピーのみが使用されている必要があります。デバッグ> Windows>モジュールを使用して診断します。 –
本当である可能性があります。しかし、他のライブラリを構築するためにどのようなオプションが使用されたかを知ることは難しいです。今日私は、ドライバとDLLがVS 2010環境外のインストールで問題なく成功して実行できることを知りました。だから、ランタイムの問題を抱えています。 – Lucius
もしあなたがそれを知らないのであれば、不一致率が99.9%に上昇するでしょう。DLLインターフェースからstdタイプを公開するプログラマーは、電話を持っている必要があります。 –