うまく動作することは保障されていません.
istreamのようなc++で記述されたclassオブジェクトは,コンパイラのバージョンやコンパイル時のオプションによって違う形式のオブジェクトとしてビルドされます.そのため,DLL自体をビルドしたコンパイラと,DLLを呼び出す側のプログラムをビルドしたコンパイラのバージョンが違うと,オブジェクトの互換性が損なわれ正常に動作しなくなります.
具体例をあげると,sizeof(istream) の値が,つまりistreamオブジェクトの大きさが,DLL側と呼び出し側で異なる,といった事がおきます.
どうしても動かしたい場合は,同一のコンパイラ・同一のコンパイルオプションでDLLとプログラム側を両方ビルドすればとりあえずは動作するようになります.
やはり同じコンパイラ・同じオプションでビルドしないと駄目ですか。
ありがとうございます。