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



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