Chr関数の動作結果の違いについて

このQ&Aのポイント
  • IIS7.0を使用したWebシステムで、Chr関数の動作について問題が発生しています。
  • Chr関数の引数に255を超える数値が渡されるとエラーが発生し、プログラムが落ちる状態です。
  • Webアクセス時とVBScriptで作成したコマンドファイルからの実行で、同じChr関数を使用しても結果が異なる現象が発生しています。
回答を見る
  • ベストアンサー

Chr関数の動作結果の違いについて

お世話になります。 IIS7.0を使用したWebシステムで、以下の問題が発生しており、原因が特定できず 困っております。 WindowServer2008 SP2 32bit版の環境です。(非R2) プログラムは、VBScriptで記述しています。 ある画面で、以下のようなエラーが発生してしまいます。 --------------------------------------------------------------- IISログに出力されているエラーメッセージ |800a0005|プロシージャの呼び出し、または引数が不正です。:_'Chr' --------------------------------------------------------------- プログラム内でChr関数を使用している箇所で落ちている状態でした。 調査をしたところ、Chr関数の引数に255を超える数値が渡された場合にエラーが 発生しているようでした。 ※Chr関数の引数を1ずつ足していき、256を超えたところでエラーとなりました。  256以降の数値についても、いくつか試しましたが、全てエラーとなりました。 原因切り分けのために、「MsgBox Chr(***)」を実施する簡単なvbsファイルを 作成し、実行したところ問題なく結果も表示されました。 つまり、同じChr関数を使用してもWebアクセス時とVBScriptで作成したコマンド ファイルからの実行で結果が異なっているように見えます。 同じサーバ構成で問題なく動作している環境があるなかで、1環境でだけこのよう な現象が発生している状態です。 問題の出ている環境は新規に作成した環境ですので、IISの設定誤りが無いかを確認 したのですが、正常な環境と比べて問題となる点が見つかりませんでした。 Chr関数の結果に影響を与えるような設定など、何か情報を頂けると助かります。 お手数をお掛けしますが、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://www.jb51.net/article/22380.htm 中国語読めない。読めたとしてもASP使ったことないけど。 #俺の環境Vista ページ側のソースに@LCID = 1041を突っ込んでみるとか http://msdn.microsoft.com/en-us/library/ie/ms525091%28v=vs.90%29.aspx コントロールパネルの「地域と言語のオプション」を見てみるとか、かなあ。 #ただ、多分本質的な解決策はChrWなりChrBなり、適切な関数に置き換えることなんだろうと思っている。暫定的な対策で動いちゃうと、本質的な解決が先延ばしにされやすいから圧力をかけたいところ。

jokiban
質問者

お礼

情報ありがとうございました。 「地域と言語のオプション」の、「管理」タブにある「予約されたアカウントへコピー」ボタンから呼び出される「地域と言語の設定」ウィンドウにて、「既定のユーザーアカウント」と「システムアカウント」の2つにチェックを入れたところ、問題が解消しました。 「地域と言語のオプション」の「形式」や「場所」を見る限り「日本」が選択されておりましたが、システムアカウントには別の言語が設定されているようでした。今回の処置で、言語の情報がシステムアカウントにも反映され、復旧となったようです。 ただ、ご指摘ありましたように、根本的な解決はChrWへのプログラム修正だと思っています。機会があるときに、プログラムの修正を検討したいと思います。(こうすると、先延ばしになってしまいそうで、よろしくないのですが…)

関連するQ&A

  • chr関数の戻り値について質問です。

    chr関数を使用して、バイナリレベルで自由なデータを、ファイルに出力したいと思っていますが、一部のデータがうまくいきません。 たとえば以下のようなコードを実行して、バイナリエディタで中身を見てみると、0x81~0x9Fと0xE0~0xFCまでが全て、0x00に変換されて出力されています。 Dim i As Long Dim binHex As String Open fileName For Binary As #1 For i = 0 To 255   binHex = Chr(i)   Put #1, , binHex Next 0x81等をファイルに書き込む良い方法は無いでしょうか? 詳しい方、アドバイスをお願いいたします。

  • ASPが動かない

    いつもお世話になっています。 WINNT4.0SP6a-IIS3.0の環境でASPを使用したいのですが、 スクリプトが全く動作しません。 下記の2パターンを行って見た結果いずれもNGでした。 --1 --------------------------------------------- <SCRIPT LANGUAGE=VBScript RUNAT=Server> For i = 1 to 7 Response.Write "<FONT SIZE=" & i & ">" Response.Write "Hello! World" Response.Write "</FONT><BR>" & chr(13) & chr(10) Next </SCRIPT> --1 の結果---------------------------------------- ▲このページでスクリプトエラーが発生しました。 エラー:オブジェクトがありません。:'Response' ・・・といったダイアログが表示された -------------------------------------------------- --2 ---------------------------------------------- <% For i = 1 to 7 Response.Write "<FONT SIZE=" & i & ">" Response.Write "Hello! World" Response.Write "</FONT><BR>" & chr(13) & chr(10) Next %> --2 の結果---------------------------------------- 全く何も表示されなかった。 -------------------------------------------------- 確認事項 1)インターネットサービスマネージャーの設定では ASPファイルが格納されているディレクトリの"アクセス"の "実行(X)"にはチェックを入れた 2)インストール手順、 ・NTserver4.0インストール ・IIS2.0インストール ・IE4.0にバージョンアップ ・サービスパック6aにバージョンアップによってIISは3.0になった。 上記のような設定を行いました。 この場合何が原因と考えられますでしょうか? 補足が必要でしたら随時更新いたしますので、 どうか、よろしくお願いいたします。

  • 関数引数に対する制限値チェック方法

    引数に対する制限値チェック方法  プログラミング(組み込み系C言語)関数作成時にいつも私が迷ところなのですが、  関数の引数に対する制限値(範囲外)チェックどうするか、次の(1)、(2)で悩んでます。。   【1】関数内で制限値チェックで行い、制限値外であれば戻り値でエラーコードを返す。   【2】関数呼び出し時に、引数となる値(変数)をチェックし、制限値内であることを確認してから、関数を呼び出す。  上記の【1】、【2】の方法どちらがよいでしょうか?  状況にもよるとは思うのですが、その場合はどういった状況時に(1)||(2)がよいのか教えてください。  (【3】もあればお願いします。)  --【1】がお勧めの場合の質問  (1)本関数での"結果"を返したいときどうすればよいかアドバイスください。     戻り値("結果")と、エラーコードを兼用するのはなんかイヤです。。     エラーコード付き関数は、全て同じ戻り値(1:OK時、-1:NG時 みたいに)     としてまとめたいからです。  (2)極端にほとんどの関数の戻り値を、OK/NG とす。これってどうですか?、 ///////////////////////  【1】、【2】の利点、欠点を僕なりに考えてみました。  ##【1】の利点/欠点  利点:   ・本関数呼び出し時に、毎回制限チェックをしなくてよくなる。    (汎用的に様々な場面で、使用するのであればこれは良い利点だと思います。)  欠点:   ・戻り値のとして、エラーコードを返さなくてはならないため、本関数での結果を返したい場合、    以下方法をとらないといけない。      1、引数をポインタとして、その引数で値を返す。      2、戻り値として、エラーコードと兼用して返す。        (例:エラー時の戻り値 = 0、正常にの戻り値 = 1~ 255)  ##【2】の利点/欠点  利点:   ・エラーコードを返す必要がなくなるため、戻り値が有効利用できる。  欠点:   ・関す呼び出し毎に、制限チェックが発生し、制限チェック忘れが発生する。    (汎用的に使うにのであればなお・・・)

  • インクルードしたファイルの関数を使用する

    お世話になっております。カナと申します。 宜しくお願いいたします。 ・windowsXP ・Vbscript ・IIS5.0 インクルードしたaspファイルに、関数があるのですが、 それを実行し戻り値を取得して呼び出し元の関数に戻った際に、 エラー「この変数は宣言されていません。」が出てしまいます。 以下ソースです。 '~~~~~TEST_1.asp~~~~~~~~~ <%@ LANGUAGE="VBScript" %> <% option explicit %> <!-- #include file="TEST_2.asp" --> <% call TEST_1() %> <% public function TEST_1(Data) Dim Data On Error Resume Next Data=27 Call TEST_2(Data) Response.Write(Data)%><br><%      '↑きちんと30が取得できます Response.Write(Err内容:" & Err.Description)%><br><% '↑ここでエラーの確認をしています。      '「この変数は宣言されていません。」になります。 End Function %> ~~~~~TEST_2.asp~~~~~~~~~ <% Public Sub TEST_2(ByRef Data) On Error Resume Next Response.Write("Data)%><br><%      '↑27が表示されます     Data=Data+3 End Sub %> ------------------------------------------------------- 以上です。 callで関数を呼んで、実行結果は正しく取得できるのですが、戻ってきたときにエラーになるので、この先のコードを書いていったときにエラー処理等に問題が出てしまいます。 もっと長いソースを書いているときも同様のエラーが出るので、ファイルのインクルードの仕方か関数の呼び出し方など、根本的になにか問題があるのだと思うのですが・・・。 何かおかしい点があるのでしょうか? 大変困っています。 申し訳ありませんが、どなたかご教授ください。

  • CreateObject("Excel.Application")でVBScript実行時エラー

    ActiveServerPage(サーバーサイド)でExcelを起動させ データベース(SQLServer)より取得したデータをExcelに貼付け 保存させたいのですが。 2台のPCでは正常に動作するものの、もう1台のPCで実行すると 以下エラーが発生します。 ---------------------------------------------- Microsoft VBScript 実行時エラー エラー'800a01ad' ActiveXコンポーネントはオブジェクトを作成できません。 :'Excel.Application' /××/××/××.asp 行705 ---------------------------------------------- ↓705行目 <% .. set ○○ = CreateObject("Excel.Application") .. %> Microsoftサポート技術情報の [IIS]ASPがVBScript実行時エラー"800a01ad"を返す http://support.microsoft.com/default.aspx?scid=kb;ja;JP194801 レジストリを確認しましたが、3台とも同じ設定でした。 またExcelファイルのアクセス権をEveryOneフルコントロールに設定し 実行してみましたが状況が変わらず・・・。 クライアントサイドのVBScriptでExcelを起動させて 見た所、問題なく起動終了しました。 IISの問題なのでしょうか? ちなみに環境はWinNT4.0、IIS4.0(SP6)、Excel2000(SR-1)です。 同様のケースで過去に解決された方、または良い案がある方。ご教授下さい。

  • 関数重複の問題

     VBScriptで同じ関数名があってもエラーが出ずに、処理が実行されてしまいます。(呼び出しが早い方が実行されるみたい。)  自分で関数名の管理をやっておればよいのですが、プログラム自体が大きくなっていくと、関数の重複によるプログラムエラー?(意図しない動き)が懸念されます。  また、クラス内ではPrivate関数と同じ関数名があった場合などクラスでの問題もおきてくるのではないかと考えます。(Private関数の方が優先される?←試していないのでわからない。)  変数に関しても同様です。  これらの問題を回避する方法として、関数名/変数を管理する技術等はありますでしょうか?ご教授のほど、よろしくお願いいたします。

  • VBAで文字列を引数とするアドイン関数を呼び出す場合

    いつもお世話になります。 ExcelVBAで、アドインから読み込んだ関数を使用する際、 Workbooks("xxx.xla").Application.Run ("xxx") と呼び出すのはいいのですが、もしその関数が 文字列を引数とする場合は、やはり下の書き方のように Workbooks("xxx.xla").Application.Run ("xxx(" & Chr(34) & "C:\work\data.csv" & Chr(34) & ")") と、Chr関数を使用しなければいけないのでしょうか。 もし、もっと簡単な記述がありましたら、ご教授ください。 よろしくお願いいたします。

  • ASP.NET2.0んの動作不良

    環境 Windows2003(IIS6)    ASP.NETバージョン 2.0.507.727 上記環境でaspxにアクセスすると「サーバーアプリケーションは使用できません」と表示されます。 またIISのプロパティよりASP.NETを開き、構成の編集ボタンを押すと「構成の読み取り中にエラーが発生しました。指定されたエンコードに無効な文字があります。…」とエラーダイアログが開きます。 同画面に載っているファイルの場所に誤りはないようです。 ちなみに別のサーバ上ではエラー無く動いています。 よってプログラムの問題でなく、環境の問題かと思っているのですが、同じような現象に遭遇した等アドバイスがございましたらいただけませんでしょうか? よろしくお願いします。

  • execl関数上でvmstatを使ったcpu使用率の取得

    ソケットを使用したネットワークプログラミングを 作成しているのですが、その中でexecl関数を使用して vmstatを実行して、コンソールに結果を示すまではできるのですが、その結果をファイルに出力させることができません。execl上で第一引数を"vmstat>ファイル名"にしてもファイルは作られません。一体どうしたらよろしいのでしょうか?言葉が足りない部分があるかもしれませんが、どうぞよろしくお願いします。

  • 関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。

    関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。 function hoge(m, l, p, h) {} (中身は省略しています。) この関数の引数「h」にhtmlを代入しようとしています。 そのhtmlには、WindowOpen()があり、そのまま代入すると「")"がありません」 エラーが発生するのですが、これは無茶なことなのでしょうか。 なんとか解決方法があれば教えていただけませんでしょうか。 「"」の時のように「\"」ではだめだったので行き詰っています。

専門家に質問してみよう