HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0613
ゆうやんFormatMessageについて3解決


ゆうやん

リンク

2021/6/13(Sun) 12:19:14|NO.93028

FormatMessage関数でメッセージを表示させようとした瞬間、すぐ落ちてしまうのですが、何か原因があるのでしょうか。

#include "hsp3utf.as" #include "user32.as" #uselib "kernel32.dll" #func GetLastError "GetLastError" #func FormatMessage "FormatMessageW" wptr,wptr,wptr,wptr,wptr,wptr,wptr #define FORMAT_MESSAGE_FROM_SYSTEM $00001000 #define FORMAT_MESSAGE_IGNORE_INSERTS $00000200 sdim ermsg,256 FormatMessage FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,384,0,varptr(ermsg),256,0 ermsg=cnvwtos(ermsg) dialog ermsg,1 end



この記事に返信する


こいる

リンク

2021/6/13(Sun) 19:01:02|NO.93033

エラーコード384は存在しないのではないでしょうか?
https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
と思いましたが、FormatMessageA関数だと「安全でないためファイル共有には接続できません(以下略)」が取得できますね。

ではそのエラーコードは、どの関数をどんな引数で呼び出したときに返されたのでしょうか?
エラーが再現できるかは分かりませんが、なにか分かるかもしれません。



沢渡

リンク

2021/6/13(Sun) 19:11:44|NO.93034

FormatMessageWはUTF-16を扱うAPIですが、
第6パラメータにはバッファの(バイト数ではなく)文字数を指定します。
そして、UTF-16は1文字=2バイトなので、「sdim ermsg,256」を
「sdim ermsg,512」にすればよいのでは。



ゆうやん

リンク

2021/6/13(Sun) 22:01:30|NO.93036

沢渡さん、ありがとうございます。
エラーメッセージを取得するため、FormatMessage関数を使っていましたが、やっぱりsdimのバッファが問題だったのですね…。
英語表記にしてみたところ、文字が切れて正しく表示されなかったため、sdimを1024にしたら正しく表示されるようになりました。

#include "hsp3utf.as" #include "user32.as" #uselib "kernel32.dll" #func GetLastError "GetLastError" #func FormatMessage "FormatMessageW" wptr,wptr,wptr,wptr,wptr,wptr,wptr #define FORMAT_MESSAGE_FROM_SYSTEM $00001000 #define FORMAT_MESSAGE_IGNORE_INSERTS $00000200 ;0x0409は英語の言語ロケールID 日本語は0x0411 sdim ermsg,1024 FormatMessage FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,0,384,0x0409,varptr(ermsg),512,0 ;ermsg=cnvwtos(ermsg) MessageBoxW hwnd,varptr(ermsg),"",16 end



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.93028への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2021(c) All rights reserved.