dll から ::AfxGetApp() を用いて,
呼び出し側 exe の CWinApp* をとろうとしました.
::AfxGetApp() から値が返ったのですが,
それは呼び出し側 exe の CWinApp* ではありませんでした.
# 返ってきた CWinApp* のアプリケーション名を保持する変数が
# 空になっていたのでわかりました.
dll から呼び出し側 exe の CWinApp* をとるにはどうしたら
いいのでしょうか?
私も似たようなこと試しています。試している最中なので間違ってい
たらごめんなさい。
MFC拡張dll作った時にはエクスポートしたクラスからは何にも考えずに
さくっと取得できました。
レギュラーdllだと
AFX_MANAGE_STATE(AfxGetStaticModuleState())の前に書くと取得できています。
この後に書くと、dllmainをラッピングしているCWinAppが取得されるみたいです。
しかし、このポインタ使っていろいろ操作してもいいのかな?と思って調査中です。
>しかし、このポインタ使っていろいろ操作してもいいのかな?と思って調査中です。
調べたのですが、exeとdllの環境(MFCの有無やバージョン、スレッド
Debug/Release等)が違う場合はいろいろ問題がありそうです。
拡張dllではそれらが一致していることが前提ですから大丈夫ですが、
レギュラーdllだと環境が異なっても使えるようにする為には呼び出さない方が
無難なようです。
Get/WriteProfileXXが使いたいんだけどいい方法ないかな。
(別スレッドにした方がいいですか?)
ツイート | ![]() |