dll から呼び出し側のアプリケーションポインタをとるには?


fuga  2005-01-15 00:21:58  No: 56006

dll から ::AfxGetApp() を用いて,
呼び出し側 exe の CWinApp* をとろうとしました.

::AfxGetApp() から値が返ったのですが,
それは呼び出し側 exe の CWinApp* ではありませんでした.
# 返ってきた CWinApp* のアプリケーション名を保持する変数が
# 空になっていたのでわかりました.

dll から呼び出し側 exe の CWinApp* をとるにはどうしたら
いいのでしょうか?


てつや  2005-01-15 04:45:44  No: 56007

私も似たようなこと試しています。試している最中なので間違ってい
たらごめんなさい。
MFC拡張dll作った時にはエクスポートしたクラスからは何にも考えずに
さくっと取得できました。
レギュラーdllだと
AFX_MANAGE_STATE(AfxGetStaticModuleState())の前に書くと取得できています。
この後に書くと、dllmainをラッピングしているCWinAppが取得されるみたいです。

しかし、このポインタ使っていろいろ操作してもいいのかな?と思って調査中です。


てつや  2005-01-18 00:34:03  No: 56008

>しかし、このポインタ使っていろいろ操作してもいいのかな?と思って調査中です。

調べたのですが、exeとdllの環境(MFCの有無やバージョン、スレッド
Debug/Release等)が違う場合はいろいろ問題がありそうです。
拡張dllではそれらが一致していることが前提ですから大丈夫ですが、
レギュラーdllだと環境が異なっても使えるようにする為には呼び出さない方が
無難なようです。
Get/WriteProfileXXが使いたいんだけどいい方法ないかな。
(別スレッドにした方がいいですか?)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加