DebugMessageNo.07244
h-tom さん 12/06/22 00:50
 

h-tom です。

秀丸担当さんが、マクロ会議室に書き込んだマクロを書き換えたら、
DebugMessageが表示されました。

---------------------------
DebugMessage
---------------------------
Buffer overrun at LocalFree (1187) <文字化けした内容>

\util.cpp(989) error = 158

---------------------------
OK  
---------------------------

書き換えたのは、3箇所です。

前1:$strOutput = "Output.txt";
後1:$strOutput = "D:\\temp\\test_sjis.txt";

前2:callmethod #objStream, "SaveToFile", $strOutput, 2;
後2:callmethod #objStream, "SaveToFile", $strOutput, 1;

 allowobjparam 0;
の位置を、
 callmethod #objStream, "SaveToFile"〜
の後ろへ移動。

・"allowobjparam 0; "の位置を、元の場所に戻すと、DebugMessageは表示されない。
・$strOutputの内容を、一文字でも変更すると、"allowobjparam 0; "の場所に関係
  なく、DebugMessageは表示されない。
dump.txtが必要なら、連絡をお願いします。
(文字化けした箇所もあるので、圧縮してメールで送ったほうがいい?)

//ここから----------------
$strOutput = "D:\\temp\\test_sjis.txt"; //変更1
$strUrl = "http://hide.maruo.co.jp/";

question $strOutput + "に\n" + $strUrl + "の内容を保存していいですか?";
if( result == no ) endmacro;

#objHttp = createobject("Msxml2.XMLHTTP");
callmethod #objHttp, "Open", "GET", $strUrl, 0;
callmethod #objHttp, "Send";

#objStream = createobject( "ADODB.Stream" );
callmethod #objStream, "Open";
setpropnum #objStream, "Type", 1;//adTypeBinary

allowobjparam 2;
$binBody = getpropstr( #objHttp, "responseBody" );
callmethod #objStream, "Write", $binBody;
//allowobjparam 0; //変更3

callmethod #objStream, "SaveToFile", $strOutput, 1; //変更2
allowobjparam 0; //変更3

callmethod #objStream, "Close";

openfile $strOutput;
endmacro;
//ここまで----------------

[ ]
RE:07244 DebugMessageNo.07247
秀丸担当 さん 12/06/22 14:56
 

報告ありがとうございます。
調べてみたら確かにおかしい点がありました。

SaveToFileの箇所で、バイナリデータとして"D:\\temp\\test_sjis.txt"を解釈
しようとしているところで、この文字列を16進数2桁の連続として変換しようと
して、16進数2桁ではないためその処理がうまく動いていませんでした。
もし16進数2桁でなかったとしてもDebugMessageが出てしまうことはないように
修正させていただきます。

[ ]