マクロtitleが途中で変わるNo.02281
EXZS さん 03/07/16 01:22
 
毎度です。
えっとβ版だけの問題かどうかはわかりませんが、
β8で現象が出ているのでご報告します。

マクロにてtitleを変更しておりますが、途中でタイトルが変わったりします。
マクロ文中にtitleを変更している箇所はなく、
変更している間に実行している命令を絞り込んでいくと

if (dllfunc("NEWDLGPAGE","page1",48) == 0

という、田楽DLLにアクセスしているところだったりします。
#その前後にmessage文を入れて変化するのを確認しました。
変化後のタイトルの内容はですが、"NEWDLGPAGE"とか
マクロで使っていたり変数で使ってそうな文字列に
なっていたりしますが、確実に何が使われているかわかりません

田楽DLLも最新版を入れてみましたが現象に変わりはありません

ちょっと原因がわかりませんが、ご確認できませんでしょうか?

[ ]
RE:02281 マクロtitleが途中で変わるNo.02287
秀丸担当 さん 03/07/16 18:17
 

田楽DLLのサンプルのマクロで試してみましたが、再現することができませんで
した。
田楽DLLはDLLファイルなので、秀丸マクロでできないいろいろなことができるの
で、DLLの関数内でなんでもできてしまいます。
杉浦さんいきいてみないとわからないかもしれません。

[ ]
RE:02287 マクロtitleが途中で変わるNo.02292
EXZS さん 03/07/17 00:26
 
>田楽DLLはDLLファイルなので、秀丸マクロでできないいろいろなことができるの
>で、DLLの関数内でなんでもできてしまいます。
>杉浦さんいきいてみないとわからないかもしれません。

とはいえ、DLLの中から、titleを変えられるのでしょうか?
わかったことですが、おかしくなるタイトルは直前に検索した文字列でした。
で、一応差し障りのない程度に省略したマクロを貼り付けます。
Win2000SP3とXPSP1で再現しました。

titletest.mac
----------------------------------

OptionSetting:
if (1/2 == 0 && version < 302) {
message "このマクロには秀丸の Ver.3.02 以降が必要です。";
endmacro;
}
//=== タブの作成表示 ================================
//田楽DLLのロード
loaddll(hidemarudir + "\\DengakuDLL.dll");
if (!result) {
message "DLL をロードできませんでした。";
endmacro;
}
title "ヘッダ編集のオプション";
call OptionChange;
goto END;

ERROR:
message "何らかのエラーによりマクロを中止します。";

END:
freedll;
endmacro;

OptionChange:
// 著作権情報(page 6)
if (!dllfunc("NEWDLGPAGE","page5",60))goto ERROR;
$ProgramerName = "ProgramerName";
call SetDiagText "ProgramerName",$ProgramerName,"プログラマ名(&P)";
if (!dllfunc("NEWCONTROL","text","","")) goto ERROR;
if (!dllfunc("NEWCONTROL","text","","著作権情報を入力してください")) goto ER
ROR;
if (!dllfunc("NEWCONTROL","text","","(空白行以下は出力しません)")) goto ER
ROR;
$Copyright = "Copyright";
call SetDiagTextMulti "Copyright",$Copyright;
if (!dllfunc("SETCTRLHEIGHT","",5)) goto ERROR;
call SetDiagCheck "No","DefalutSave","著作権情報初期値の保存";
if (!dllfunc("NEWCONTROL","text","","著作権情報の更新は最初の1行だけです"))
 goto ERROR;

//ヘッダ編集(page3)
$CommentEdit = "CommentEdit";
$AutoColect = "AutoColect";
$SubrJudgment = "SubrJudgment";
$AsmColect = "AsmColect";
$AutoInfo = "AutoInfo";
$AutoID = "AutoID";
if (!dllfunc("NEWDLGPAGE","page3",60)) goto ERROR;
if (!dllfunc("NEWCONTROL","radio","CommentEdit","History/特記事項")) goto E
RROR;
if (!dllfunc("SETCTRLITEM","","上書き(&O)","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","挿入(&I)","-1")) goto ERROR;
if($CommentEdit == "Overwrite"){
if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
}
else{
if (!dllfunc("SETCTRLSTATE","","2")) goto ERROR;
}
call SetDiagCheck $SubrJudgment,"SubrJudgment","サブルーチンヘッダ自動挿入(&S)";
call SetDiagCheck $AsmColect   ,"AsmColect"   ,"構造化記述時のASMコレクション(&A)";
call SetDiagCheck $AutoInfo    ,"AutoInfo"    ,"設定情報の自動更新(&P)";
call SetDiagCheck $AutoID      ,"AutoID"      ,"IDの自動作成(&N)";
call SetDiagCheck $CPPcomment  ,"CPPcomment"  ,"C++風コメント(&H)";

// 関数シンクロ(page4)
$InsertObject = "InsertObject";
$StartStr= "StartStr";
$EndStr= "EndStr";
$SpecialFile= "SpecialFile";
if (!dllfunc("NEWDLGPAGE","page4",60)) goto ERROR;
if (!dllfunc("NEWCONTROL","radio","InsertObject","プロトタイプ宣言の挿入位置
")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","対応するヘッダファイル(&h)","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","自分のファイル(&I)","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","特定のファイル(&O)","-1")) goto ERROR;
if($InsertObject == "Myheader"){
if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
}
else if($InsertObject == "MyFile"){
if (!dllfunc("SETCTRLSTATE","","2")) goto ERROR;
}
else if($InsertObject == "SpecialFile"){
if (!dllfunc("SETCTRLSTATE","","3")) goto ERROR;
}
else{
if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
}
call SetDiagText "SpecialFile","","特定のファイル名(&F)";
if (!dllfunc("NEWCONTROL","text","","※挿入位置で特定のファイルを選んだとき
のみ有効です")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," ファイル名で検索した後、最初に現れる
開始文字列から挿入します")) goto ERROR;
call SetDiagText "StartStr","* 関数宣言 *","開始文字列(&S)";
call SetDiagText "EndStr","* End of Include *","終了文字列(&E)";

// 開発環境(page2)
if (!dllfunc("NEWDLGPAGE","page2",60,"")) goto ERROR;
call GetToolName;
call SetDiagText "CompilerName",$CompilerName,"コンパイラ名:Version(&C)";
call SetDiagText "AssemblerName",$AssemblerName,"アセンブラ名:Version(&A)";
call SetDiagText "LinkerName",$LinkerName,"リンカ名:Version(&L)";
call SetDiagCombo "OsName",$OsName,"使用OS名:Version(&O)";
call SetDiagCheck "No","DefalutToolSave","開発環境初期値の保存";

// 製品情報(page1)
if (!dllfunc("NEWDLGPAGE","page1",60,)) goto ERROR;
call SetDiagText "Systemname","","システム名(&S)";
call SetDiagText "Coustomer","","客先社名:部署:担当者(&C)";
call SetDiagText "Moder","","客先製品名(&N)";
call SetDiagText "Version","1.00","現在のバージョン(&V)";
call SetDiagText "Oder","","仕掛かり番号(&O)";
call SetDiagText "Cpu","","使用マイコン(&M)";

// タイムスタンプ(page6)
$TimeStamp = "%yy/%m/%d(%W)";
//--- 入力要求ダイアログの作成 ---
if (!dllfunc("NEWDLGPAGE","page6",60,)) goto ERROR;
if (!dllfunc("NEWCONTROL","text","","タイムスタンプの書式を入力してください
")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," %YY:年4桁 ex) 2000")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," %Y :年2桁 ex) 00")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," %M :月2桁")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," %D :日2桁")) goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," ※大文字、小文字の区別はありません"))
 goto ERROR;
if (!dllfunc("NEWCONTROL","text",""," %W :曜日日本語 ex) 月火...")) goto ER
ROR;
if (!dllfunc("NEWCONTROL","text",""," %w :曜日英語   ex) Mon,Thu")) goto ER
ROR;
if (!dllfunc("NEWCONTROL","text",""," その他の全角、半角文字はそのまま出力
します")) goto ERROR;
if (!dllfunc("NEWCONTROL","text","","このバージョンから年月日付は自分で記入
してください")) goto ERROR;
call SetDiagText1 "TimeStamp",$TimeStamp;


if (!dllfunc("NEWDIALOG","設定値の変更",62,"")) goto ERROR;
if (!dllfunc("NEWCONTROL","tab","tab1","")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page1,製品情報","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page2,開発環境","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page3,ヘッダ編集","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page4,関数シンクロ","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page5,著作権情報","-1")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","page6,タイムスタンプ","-1")) goto ERROR;

if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
if (!dllfunc("NEWCONTROL","text","","")) goto ERROR;
if (!dllfunc("SETCTRLWIDTH","",60-25)) goto ERROR;
if (!dllfunc("NEWCONTROL","okcancel","","")) goto ERROR;
// ダイアログの表示
if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)) goto ERROR;
while(1){
$name = "";
while (strlen($name) == 0) $name = dllfuncstr("WAITCTRLNOTIFY",1);
if ($name == "0" || $name == "1") break;
}
//--- OKが押されたら入力値をゲット ---
if (!dllfunc("ENDDIALOG")) goto ERROR;
if( $name == "1" ) {
}

freedll;
return;


SetDiagText:
$data = "";
if($data == "") $data = $$2;
if (!dllfunc("NEWCONTROL","text","",$$3)) goto ERROR;
if (!dllfunc("SETCTRLWIDTH","",20)) goto ERROR;
if (!dllfunc("NEWCONTROL","edit",$$1,$data)) goto ERROR;
return;

SetDiagCombo:
$data = "";
if($$2 == "" || $$2 == "なし" || $$2 == "未使用"){
if($data == "") $data = $$2;
if($data == "") $data = "なし";
if (!dllfunc("NEWCONTROL","text","",$$3)) goto ERROR;
if (!dllfunc("SETCTRLWIDTH","",20)) goto ERROR;
if (!dllfunc("NEWCONTROL","edit",$$1,$data)) goto ERROR;
}
else{
if (!dllfunc("NEWCONTROL","text","",$$3)) goto ERROR;
if (!dllfunc("SETCTRLWIDTH","",20)) goto ERROR;
if (!dllfunc("NEWCONTROL","combo",$$1,"")) goto ERROR;
if (!dllfunc("SETCTRLITEM","","なし","")) goto ERROR;
if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
if($data != "" && $data != "なし" && $data != "未使用"){
if (!dllfunc("SETCTRLITEM","",$data,"")) goto ERROR;
if (!dllfunc("SETCTRLSTATE","","2")) goto ERROR;
}
if($$2 != "" && $$2 != "なし" && $$2 != "未使用" && $$2 != $data){
if (!dllfunc("SETCTRLITEM","",$$2,"")) goto ERROR;
}
}
return;

SetDiagText1:
$data = "";
if($data == "") $data = $$2;
if (!dllfunc("NEWCONTROL","edit",$$1,$data)) goto ERROR;
return;

SetDiagTextMulti:
$data = "";
if($data == "") $data = $$2;
if (!dllfunc("NEWCONTROL","mledit",$$1,$data)) goto ERROR;
return;

SetDiagCheck:
if (!dllfunc("NEWCONTROL","check",$$2,$$3)) goto ERROR;
if($$1 == "Yes")
if (!dllfunc("SETCTRLSTATE","","1")) goto ERROR;
else
if (!dllfunc("SETCTRLSTATE","","0")) goto ERROR;
return;


GetToolName:
$mcu = "MCU";
$lang = "LANG";
$CompilerName = "Compiler";
$AssemblerName = "Assembler";
$LinkerName = "Linker";
$OsName = "Os";
return;

--------------------------------

[ ]
RE:02292 マクロtitleが途中で変わるNo.02293
杉浦 まさき さん 03/07/17 01:54
 
ども、杉浦まさきです。

>>杉浦さんいきいてみないとわからないかもしれません。

こちらの環境(XPSP1)でも再現しましたが、何が原因なのかは
ちゃんと調べないとわからないです。
#ただでさえ時間がないところにHDDがクラッシュするという
 泣きっ面に蜂状態なので(ToT)、今は調査の時間が取れないです。

>>田楽DLLはDLLファイルなので、秀丸マクロでできないいろいろなことができるの
>>で、DLLの関数内でなんでもできてしまいます。

う〜ん…確かにできてしまいますが、秀丸本体に影響が
でないように気を遣っているつもりです。
#「つもり」が一番怖いという話もありますが(^^;。

[ ]
RE:02293 マクロtitleが途中で変わるNo.02296
秀丸担当 さん 03/07/17 19:06
 

EXZSさんの示されるマクロでやってみたところ、再現することができました。
調査したところ、秀丸側に原因がある可能性があります。
もう少し調査してみます。

[ ]
RE:02296 マクロtitleが途中で変わるNo.02298
EXZS さん 03/07/18 01:34
 
>
>EXZSさんの示されるマクロでやってみたところ、再現することができました。
>調査したところ、秀丸側に原因がある可能性があります。
>もう少し調査してみます。

あわわ、杉浦さんまでお出まし頂いて申し訳ありませんでした。
ただ、今回はなぜか秀丸側の検索バッファの内容がタイトルに
混じるって動作になっているみたいだったので
変数領域の中で何らかの壊れ方をしていないか心配だったもので

今気づいたけど、マクロの処理でエラーが発生したら2重にDLLを解放している。
削りすぎました(汗)


[ ]
RE:02298 マクロtitleが途中で変わるNo.02301
秀丸担当 さん 03/07/18 15:02
 

さらに調べたところ、dllfuncの記述ミスが原因のようです。

if (!dllfunc("NEWDLGPAGE","page1",60,)) goto ERROR;

となっているところの「60」の後の「,」が要りません。
これが中間コードへのコンパイル時に誤動作して、タイトルを変えるようになっ
てしまっていました。
コンパイルが通ってしまって実行できてしまうのは問題なので修正します。

[ ]
RE:02301 マクロtitleが途中で変わるNo.02312
EXZS さん 03/07/19 00:29
 
>
>さらに調べたところ、dllfuncの記述ミスが原因のようです。
>
>if (!dllfunc("NEWDLGPAGE","page1",60,)) goto ERROR;
>
>となっているところの「60」の後の「,」が要りません。
>これが中間コードへのコンパイル時に誤動作して、タイトルを変えるようになっ
>てしまっていました。
>コンパイルが通ってしまって実行できてしまうのは問題なので修正します。

あらら、恥ずかしい間違いをしていました。
ちゃんと引数を渡すと再現しないことを確認しました
また、β9で文法エラーが出るのを確認しました。
とはいえ、なんか不味いところが見つかってお互い良かったのでしょうか?(苦笑)

杉浦さまにはお手数をおかけしました。

[ ]
RE:02293 マクロtitleが途中で変わるNo.02467
EXZS さん 03/07/29 00:57
 
>こちらの環境(XPSP1)でも再現しましたが、何が原因なのかは
>ちゃんと調べないとわからないです。
>#ただでさえ時間がないところにHDDがクラッシュするという
> 泣きっ面に蜂状態なので(ToT)、今は調査の時間が取れないです。

杉浦まさきさん、いつも田楽DLL便利に使わせて頂いております。
えっと後日談なのですが、最近マクロサーバーで作っていたマクロを
田楽DLLに書き換えて気づいていたのですが、
このスレで見つかったdllfunc関数への引数が足りないから
エラーが発生していた件ですが・・・

田楽DLLに同梱のdgdll.macにも同じようなミスが
所々にありました。
んで、現状のβ版ではこのエラーは実行されずにエラーメッセージを
表示して終了してしまうので、正式版が出るまでに修正した方が
良いかもしれません

いらぬ心配かもしれませんが、念のためご報告しておきます

[ ]
RE:02467 マクロtitleが途中で変わるNo.02468
杉浦 まさき さん 03/07/29 01:53
 
EXZS さん、こんばんは。
杉浦 まさきです。
#会議室違いで申し訳ありません。>管理者様&読者の皆様

>田楽DLLに同梱のdgdll.macにも同じようなミスが
>所々にありました。
>んで、現状のβ版ではこのエラーは実行されずにエラーメッセージを
>表示して終了してしまうので、正式版が出るまでに修正した方が
>良いかもしれません

う〜ん、とりあえず一通り実行してみましたが、エラーで
終了してしまうということはなかったです。というわけで、
できれば具体的な場所を教えていただけると助かりますm(_ _)m。

[ ]
RE:02468 マクロtitleが途中で変わるNo.02495
EXZS さん 03/07/30 00:03
 
>EXZS さん、こんばんは。
>杉浦 まさきです。
>#会議室違いで申し訳ありません。>管理者様&読者の皆様
>
>>田楽DLLに同梱のdgdll.macにも同じようなミスが
>>所々にありました。
>>んで、現状のβ版ではこのエラーは実行されずにエラーメッセージを
>>表示して終了してしまうので、正式版が出るまでに修正した方が
>>良いかもしれません
>
>う〜ん、とりあえず一通り実行してみましたが、エラーで
>終了してしまうということはなかったです。というわけで、
>できれば具体的な場所を教えていただけると助かりますm(_ _)m。

済みません〜〜!!!
以前、このエラーの為に検証用に作った自分のマクロと
dgdll.macと見比べながら作業していたから見間違えたかも
しれません〜〜

すっぱり忘れて下さい。
お騒がせしました〜〜

[ ]