トップページ > プログラム > 2015年02月22日 > o1GxeALa

書き込み順位&時間帯一覧

42 位/252 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000110000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Win32API質問箱 Build11 [転載禁止]©2ch.net

書き込みレス一覧

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に安全に渡して引き継がせる方法ってないんでしょうか。
Win32API質問箱 Build11 [転載禁止]©2ch.net
513 :デフォルトの名無しさん[sage]:2015/02/22(日) 14:17:07.73 ID:o1GxeALa
ありがとうございます。

>>511
リンク先のCausesと、ファイルハンドルのExampleによると、オプションMT(d)は無理みたいですね。
リンク先のページを教えてもらって助かりました。

>>512
オプションMD(d)を使うしかないんですね。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。