MessageBox でアクセス違反 – プログラミング – Home

MessageBox でアクセス違反
 
通知
すべてクリア

[解決済] MessageBox でアクセス違反


谷岡
 谷岡
(@谷岡)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

こんにちは

DllMain() の第2引数の値が DLL_PROCESS_ATTACH のときに
MessageBox( NULL, error, title, MB_OK | MB_ICONSTOP );
を呼び出すとアクセス違反を起こすのですが、何が原因でしょうか?

動作環境は Windows XP SP1、コンパイラは VS .NET 2003 です。

以上、よろしくお願いします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

そういう仕様です。

DllMain
http://msdn.microsoft.com/library/en-us/dllproc/base/dllmain.asp
のRemarksを参照。

|Calling imported functions other than those located in Kernel32.dll may result
|in problems that are difficult to diagnose.


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

日本語資料もありまっせ。

http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/jpdllpro/html/_win32_DllMain.asp
の「解説」

> アタッチの際、開発者が作成した DLL エントリポイント関数の本体は、スレッド
> ローカル記憶域(TLS)の作成、オブジェクトの作成、ファイルのオープンなど
> 単純な初期化作業だけを行うべきです。

> TLS、オブジェクト作成、ファイル関数以外の Win32 関数を呼び出すと、診断
> しにくい問題が発生する可能性があります。たとえば、ユーザー関数、シェル関数、
> COM、RPC、Windows Sockets の各関数(または、これらの関数を呼び出す任意の
> 関数)を呼び出すと、アクセス違反のエラーが発生する可能性があります。

MessageBox は User32.dll の関数なので、上記「ユーザー関数」に該当します。


返信引用
谷岡
 谷岡
(@谷岡)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

dairygoodsさん、シャノンさん、ありがとうございました。
マニュアルの警告を見逃していました。
DLL_PROCESS_ATTACHのタイミングでウィンドウにエラーメッセージを
表示するのは難しそうですね。別の方法を考えてみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました