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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0813
VelgailHSP3.6でサイレントクラッシュする場合がある(hspext.dll関係?)3解決


Velgail

リンク

2021/8/13(Fri) 23:53:42|NO.93569

まだ原因箇所が分かっていませんが、取り急ぎ報告(と有識者の解析投げ)します。

#include "hspext.as" screen 0,240,24 t="" gsel 0,3 repeat ot=t clipget t if(ot!=t){ redraw 0 color 255,255,255 boxf color 0,0,0 pos 0,0 mes t redraw 1 } wait 1 loop
クリップボードを10ms毎に監視して文字列が変更されていれば取得するイメージのコードを書いていました。
しかし、クリップボードを何回か更新すると【エラー表示なく】exeが落ちてしまいます。

なお、イベントビューアーを確認した所、以下のエラーイベントが発生したことからhspext.dll内のコードバグを踏み抜いているのかもしれません。

障害が発生しているアプリケーション名: hsp3.exe、バージョン: 0.0.0.0、タイム スタンプ: **** 障害が発生しているモジュール名: hspext.dll、バージョン: 0.0.0.0、タイム スタンプ: **** 例外コード: 0xc0000005 障害オフセット: 0x00005687 障害が発生しているプロセス ID: **** 障害が発生しているアプリケーションの開始時刻: **** 障害が発生しているアプリケーション パス: C:\hsp36\hsp3.exe 障害が発生しているモジュール パス: C:\hsp36\hspext.dll レポート ID: **** 障害が発生しているパッケージの完全な名前: 障害が発生しているパッケージに関連するアプリケーション ID:

hspext.dllのコードの確認はまだしてません(キツい



この記事に返信する


たらこ

リンク

2021/8/14(Sat) 02:20:01|NO.93571

http://dev.onionsoft.net/trac/openhsp/browser/trunk/plugins/win32/Hspext/Hspext.cpp#L354

GetClipboardData( CF_OEMTEXT );
の実行結果を確認してないのが不味そう



Velgail

リンク

2021/8/14(Sat) 05:15:00|NO.93575


#module clip #uselib "USER32.DLL" #func OpenClipboard "OpenClipboard" nullptr #func GetClipboardData "GetClipboardData" sptr #func CloseClipboard "CloseClipboard" #uselib "KERNEL32.DLL" #func GlobalLock "GlobalLock" int #func GlobalSize "GlobalSize" int #func GlobalUnlock "GlobalUnlock" int #deffunc clipget var t OpenClipboard GetClipboardData 7 if (stat){ gl=stat GlobalSize gl len=stat t="" GlobalLock gl dupptr p,stat,len,2 sdim t,len memcpy t,p,len GlobalUnlock gl CloseClipboard } return #global

現象解析ありがとうございます。簡易的にクリップボード取得関数をHSPで実装し直したので私の方のプログラムはこれで対応します。
(なおこちらのコードは当然ですがCC-0とします。当然に自由にご利用ください。久しぶりだこの表記w)



qqq

リンク

2021/8/14(Sat) 11:08:57|NO.93578

クリップボードはすべてのプログラムで共有するので頻繁にオープンするとよくないです。
変化したか調べたいならポーリングよりAddClipboardFormatListener使った方がいいと思います。
変化したときWM_CLIPBOARDUPDATEが飛んできます。



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