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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0827
zezenanaHSP3.6 (安定版) のmrefの動作について5解決


zezenana

リンク

2021/8/27(Fri) 22:21:48|NO.93708

HSP3.6 (安定版) をインストールして
HSP3.51で動作していたソースを実行したところ
応答なしとなってしまい、原因を調べたところmref命令の
変数割当がおかしな状態であることがわかりました。

自分の環境だけの問題なのか不明なので
どなたかHSP3.6 (安定版) の環境で以下のサンプルを
確認していただけませんでしょうか?

※Let's HSP!さんのHPサンプルを借用


mref BMSCR, 67 mes "高さ : "+BMSCR.49 mes "太さ : "+BMSCR.53 mes "イタリック体 : "+peek(BMSCR.54, 0) mes "下線 : "+peek(BMSCR.54, 1) mes "打ち消し線 : "+peek(BMSCR.54, 2) mes "出力品質 : "+peek(BMSCR.55, 2) sdim lfFaceName getstr lfFaceName, BMSCR, $E0 mes "フォント名 : "+lfFaceName

通常は現在のフォント情報を返すのですが

HSP3.6 (安定版) だと、高さ:8051896、太さ:259、
フォント名が文字化けなどとなり(異常なデータ)

HSP3.6β5やHSP3.51だと、高さ:-14、太さ:400、
フォント名:FixedSysとなります(正常なデータ)



この記事に返信する


TOMATO

リンク

2021/8/27(Fri) 23:05:24|NO.93710

HSP 3.6 にて BMSCR構造体に変更が加わった模様です。
構造体内のlogfontメンバがポインタに変更されています。

http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/win32gui/hspwnd_win.h#L410

HSP 3.6(通常ランタイム版) で実行する場合は、以下のように修正する必要があります。


mref BMSCR, 67 dupptr logfont, BMSCR.49, 56, 4 mes "高さ : "+logfont.0 mes "太さ : "+logfont.4 mes "イタリック体 : "+peek(logfont.5, 0) mes "下線 : "+peek(logfont.5, 1) mes "打ち消し線 : "+peek(logfont.5, 2) mes "出力品質 : "+peek(logfont.6, 2) sdim lfFaceName getstr lfFaceName, logfont, 28 mes "フォント名 : "+lfFaceName



zezenana

リンク

2021/8/29(Sun) 14:23:06|NO.93721

TOMATOさん

BMSCR構造体が変更されている情報ありがとうございます。
フォント情報が正常に取得出来ることを確認しました。

history.txtに記載されていた3.6RC1での不具合修正のようで
[hsp3utf]とはUnicode版対応の処理かなんかですかね?

>2021/07/15 3.6 RC1
>[hsp3utf] プラグインに渡されるBMSCR構造体のサイズが一部ずれていた不具合を修正

しかしこれだとHSP3.5以下のフォント描画関連プログラムの
互換性がなくなるようなので、他スレでもおにたまさんに質問してみます。

確認なのですが、BMSCR構造体の変更を見る限りだと、
LOGFONTは60バイトだと思うのですが、修正プログラムで
56バイト取得しているのは何か問題があるからでしょうか?

(変更前)

LOGFONT logfont; // logical font



(変更後)

LOGFONT *logfont; // logical font int logopt[14]; // dummy padding



TOMATO

リンク

2021/8/29(Sun) 14:57:27|NO.93723

> 56バイト取得しているのは何か問題があるからでしょうか?

すいません、
構造体のサイズの数え間違えですのでご指摘の通り60バイトが正しいです。



TOMATO

リンク

2021/8/29(Sun) 15:06:48|NO.93724

> history.txtに記載されていた3.6RC1での不具合修正のようで
> [hsp3utf]とはUnicode版対応の処理かなんかですかね?

LOGFONT構造体は文字コードで構造体サイズが変動するので、
従来の60バイトに収まらなかったので、ポインタ経由にしたのではと推察します。

HSP 標準ランタイム 32bit --> 60バイト
HSP UTF8版ランタイム --> 92バイト (内部的にはUTF-16)


(余談)

と、書いていて気が付きましたが、
64ビット版ランタイムだとポインタが4バイトから8バイトになるので、
こちらもずれてる… 64バイトになってる気が。


LOGFONT *logfont; // logical font int logopt[14]; // dummy padding



zezenana

リンク

2021/8/29(Sun) 16:25:03|NO.93725

TOMATOさん

LOGFONT構造体バイト数について了解しました。

>LOGFONT構造体は文字コードで構造体サイズが変動するので、
>従来の60バイトに収まらなかったので、ポインタ経由にしたのではと推察します。
>
>HSP 標準ランタイム 32bit --> 60バイト
>HSP UTF8版ランタイム --> 92バイト (内部的にはUTF-16)

TOMATOさんの上記説明でポインタに変更した理由について納得しました。

今後Unicode版が主流となることを考えるとHSP3.5以前の互換性とか
わざわざ他スレで聞く必要は無さそうですね。
(まあ構造体のアドレス直打ちのスクリプト組んでる時点で
互換性とかの話でもないですし・・)

ありがとうございました。


試しに、64bit版を試しましたが
何も処理せずきれいに落ちました。。まあ注意書きの通りということでしょうか。

>同梱されているバージョンには、将来の64bit化に向けてのβテスト版とお考えください。



記事削除

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

NO.93708への返信

マスコット

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

名前

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

削除用パスワード

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

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

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