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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0410
ひろかずhspdx使用時のMSVCR71.dllが無い時のエラーメッセージについて5解決


ひろかず

リンク

2018/4/10(Tue) 20:25:45|NO.83981

hspdxを使用したフリーゲームを公開していますが、困った点に気づいたので質問させていただきます。

hspdxを使用するにはMSVCR71.dllが必要ですが、MSVCR71.dllがインストールされていないPCでは
当然ながらエラーメッセージが出て起動出来ません。
そのエラーメッセージが1回だけ表示されるのであれば問題無いのですが、何度も何度も繰り返し
表示されるので困っています。


#include "hspdx.as" stop es_ini 512,1024,256 es_screen 640,480,32,0,0,0 es_bye end

例えば上記プログラムをEXEファイルに変換し(EXEファイルじゃないと状況が再現出来ません)、
EXEファイルがあるフォルダにhspdx.dllを入れ、かつ、MSVCR71.dllがシステムフォルダに無い
状態で実行してください。

「コンピュータに MSVCR71.dll がないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。」
というエラーメッセージが続けて3回出るかと思います。

これは、上記プログラムではhspdxで拡張された命令を3種類使用している為、エラーメッセージが
3回で済んでいるのです。
私が作成したゲームでは、hspdxで拡張された命令を32種類使用している為、エラーメッセージが
32回連続で出る形となります。
これではまるでブラウザクラッシャーかコンピュータウィルスのようです。

このエラーメッセージを1回に減らしたいのですが、何か対処方法はありますでしょうか?
よろしくお願い申し上げます。



この記事に返信する


MillkeyStars

リンク

2018/4/10(Tue) 21:30:23|NO.83984

HSPバージョンっていくつ?
一部バージョンで、起動時に DLLエントリポイントのチェックに走るバグがあったような。



GENKI

リンク

2018/4/11(Wed) 01:31:41|NO.83995

こういうエラーは一回出たら終了してた気がしてたんですが…何回も出ますか。困りますね。

#include "hspdx.as" es_ini 512,1024,256 es_screen 640,480,32,0,0,0 es_bye stop
そのままではエラーも何も出なかったので、こんな感じに書き換えてexeファイルにして同フォルダにhspdx.dllだけを置いて実行してみました。
エラーメッセージ「#Error 38 内部エラーが発生しました(38)」が表示されて実行中のソフトは終了しました。再現できませんでした。
MillkeyStarsさんが指摘されている通り、HSPが最新バージョンになっているか確認されてみてはどうでしょうか。


それでも解決しない場合…
onerrorのジャンプ先でendしないで復帰させていないか確認。


それでもだめなら…
ソフト起動直後にチェックする処理を入れる。

sdim pth, 1024, 5 dll = "MSVCR71.dll" pth(0) = dir_exe + "\\" + dll pth(1) = dir_cur + "\\" + dll pth(2) = dir_sys + "\\" + dll pth(3) = dir_win + "\\" + dll pth(4) = "c:\\windows\\SysWOW64" + "\\" + dll repeat 5 mes pth(cnt) exist pth(cnt) mes strsize loop


しかしとりあえず、readmeには「ランタイム必須。ベクターで入手してください。」を記述ですね。



ひろかず

リンク

2018/4/11(Wed) 22:13:56|NO.84001

>MillkeyStarsさん
>GENKIさん
 ご返信、誠に有り難うございます。情報不足でした。申し訳ございません。

以下の環境で問題が発生しております。
HSP ver3.4
hspdxは3.4に付属されているものを使用
自作のデスクトップPC、及びノートPC共に同じ現象が発生しております。
使用OSは2台ともWindows7 SP1 32bitです。

念のため、HSP ver3.5でも試してみましたが同じ現象が発生しました。
ひょっとしてOS依存による問題なのでしょうか? よく分かりません。

私の環境ですと、GENKIさんが書き換えたプログラムを実行すると、
「コンピュータに MSVCR71.dll がないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。」
というエラーメッセージが続けて3回出た後に、さらに
「#Error 38 内部エラーが発生しました(38)」が表示されて実行中のソフトが終了します。

プログラムの先頭に独自のチェックプログラムを入れても、そのチェックプログラムに到達する前に
エラーメッセージが連続で出る形になっております。

単なるOS依存の問題であれば、今更Windows7を使用しているユーザーは少数だろうし、
この現象に目をつぶっても良いのですが、何が原因なのか良く分からない現状ですと
どう対処すれば良いのか決断出来ません。

出来れば、皆様から色々な環境での結果が知りたいところです。
よろしくお願い申し上げます。



MillkeyStars

リンク

2018/4/12(Thu) 01:29:17|NO.84010

現象の再現できました。

【再現環境】
Windows Vista HomeBasic 32Bit

上記OS上にて、HSP 3.4a を展開し、下記スクリプトを実行すると「コンピュータに MSVCR71.dll がないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。」のダイアログが表示されました。

#include "hspdx.as" stop es_ini 512,1024,256 es_screen 640,480,32,0,0,0 es_bye end

HSPの実行ランタイム側がOSで処理を変えてるのが原因なのかと思われる。
Vista / 7 だと、DLLエントリポイントを事前にチェックに走ってるのでそこでDLLが正しく初期化できないのでエラー
(ここで、「コンピュータに MSVCR71...」が表示される。呼び出し命令の数だけダイアログが表示)

対策方法考えたけど、hspdx の扱いをやめて、HGIMG3/HGIMG4 に移植した方が良いかもしれない。
既に作成されているソフトに関しては GENKI さんが言っている通りに、利用者各自が VisualC++ 2003 ランタイムライブラリをダウンロードして実行ファイルの場所にコピーしてくださいとかしかできないと思う。

HSP3.5 からは、hspdx が非推奨(Win10 では同じ理由で利用できない)なので、DirectX の扱いを HGIMG3/HGIMG4 に移植って感じで対策するしかないと思う。



ひろかず

リンク

2018/4/12(Thu) 20:36:13|NO.84019

>MillkeyStarsさん

動作検証、並びに原因の解説、誠に有り難うございました。
おかげですっきりしました。
旧OSでのみ発生する事象であれば、ユーザーへの注意喚起で十分かなと思っています。

現在制作中のソフトは既にhspdxを使用して8割方完成しているので、それ以降のソフトについては
HGIMG3/HGIMG4への移行を考えたいと思います。
有り難うございました。



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