沢渡さん、ありがとうございます。
エラーメッセージを取得するため、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