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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0422
ゆーvarptrでUTF-16を使う方法4解決


ゆー

リンク

2018/4/22(Sun) 17:33:51|NO.84085

varptrではUTF-16が使えないと聞きました。
本当にvarptrでUTF-16使うことは出来ないのでしょうか?
文字化けしてしまうのですが...

#include "hsp3utf.as" #include "user32.as" sdim test title "标题" GetWindowTextW hwnd,varptr(test),259 dialog test
http://hsp.tv/play/pforum.php?mode=pastwch&num=80791
過去にも質問したのですが、よくわからなかったので質問しました。
できれば、スクリプトを載せてもらうと幸いです。



この記事に返信する


いののて

リンク

2018/4/22(Sun) 18:59:18|NO.84088

dialog命令を使うとShift_JISとして処理されてしまうようなので、
大元のMessageBox命令を呼び出せば正しく表示されます。

#include "hsp3utf.as"
#include "user32.as" sdim test title "标题" GetWindowTextW hwnd,varptr(test),259 MessageBoxW hwnd, varptr(test), "Title", 0



あらや(旧名あまら)

リンク

2018/4/22(Sun) 19:07:01|NO.84089

過去スレのtds12さんの仰る通りにやればできるはずなんですが

このスレも過去スレも同じく文字コード変換を追加するだけです。


#include "hsp3utf.as" #include "user32.as" sdim test title "标题" GetWindowTextW hwnd,varptr(test),259; この時点ではtestはUTF-16 test = cnvwtos(test); こうしてUTF-16からUTF-8へ変換 dialog test



ゆー

リンク

2018/4/22(Sun) 20:27:16|NO.84090

いののてさん、あらやさん。ありがとうございます。
cnvwtos命令の使い方がよくわからなかったので、varptrでUTF-16を使う方法がわからなかったです。

いののてさんとあらやさんの通りやれば、文字化けせず、正しく表示されました!
ありがとうございます!



tds12

リンク

2018/4/22(Sun) 20:43:07|NO.84091

そのコードの場合一つ問題があって、
GetWindowTextWに文字数を259として渡していますが
sdimで確保されたバイト数はおそらく64です。
このAPIの数える文字数はワイド文字で1文字あたり2バイトかかります。
メモリの確保不足は危険なのでsdimにバッファ確保サイズの引数を指定しましょう。



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