- Win32API質問箱 Build11 [転載禁止]©2ch.net
510 :デフォルトの名無しさん[]:2015/02/22(日) 13:44:25.32 ID:o1GxeALa - 詳しい人教えてください。
Windows環境で実装しています。 DLL AとDLL Bが有るとします。 DLL Aで、 void Func_A(FILE* pFP) { fprintf_s(pFP, "%d", 123); } と実装し、Func_Aはエクスポートされていて、DLL Bから利用可能な状態となっているとします。 またDLL Bでは、以下のような関数を実装しているとします。 void Func_B() { FILE* pFP = NULL; fopen_s(&pFP, "./hoge.txt", "w"); //もしくはfopen()を使う Func_A(pFP); fclose(pFP); } この時、VCの「マルチスレッドデバッグ(MTd)」でビルドした上で、 DLL BのFunc_Bを実行すると、Func_A内のfprintf_sで、エラーになります。 ※エラー内容:「要求した操作で必要なオブジェクトの種類と要求に指定したオブジェクトの種類が一致しません」 (DLLをまたいだ、内部的な、ファイルポインタ関係のメモリ操作違反?!) なおVCの「マルチスレッドデバッグDLL(MDd)」でビルドすると、エラーは出ません(共通のCRTを使うため?!)。 MTdでビルドする際に、DLL BのFILE* pFPを、DLL Aに安全に渡して引き継がせる方法ってないんでしょうか。
|