DLL内の関数にistreamオブジェクトやostreamオブジェクトを渡してDLL内で入出力を行うのはうまく動作しないのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/12/15 15:15:26
  • 終了:2007/12/15 20:17:59

ベストアンサー

id:pyopyopyo No.1

pyopyopyo回答回数357ベストアンサー獲得回数882007/12/15 19:49:44

ポイント60pt

うまく動作することは保障されていません.

istreamのようなc++で記述されたclassオブジェクトは,コンパイラのバージョンやコンパイル時のオプションによって違う形式のオブジェクトとしてビルドされます.そのため,DLL自体をビルドしたコンパイラと,DLLを呼び出す側のプログラムをビルドしたコンパイラのバージョンが違うと,オブジェクトの互換性が損なわれ正常に動作しなくなります.

具体例をあげると,sizeof(istream) の値が,つまりistreamオブジェクトの大きさが,DLL側と呼び出し側で異なる,といった事がおきます.

どうしても動かしたい場合は,同一のコンパイラ・同一のコンパイルオプションでDLLとプログラム側を両方ビルドすればとりあえずは動作するようになります.

id:goblin_the_rat

やはり同じコンパイラ・同じオプションでビルドしないと駄目ですか。

ありがとうございます。

2007/12/15 20:17:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません