田楽サーバとの DDE 通信の初期化エラーNo.37964
hirahira さん 10/03/04 11:36
 
hirahira6014です。

いつもお世話になっております。

秀丸メールでメールを保存するマクロを作成し、

これまで運用していましたが、

最近になって、田楽サーバーとのDDE 通信の初期化に失敗することが

多くなってきました。

秀丸メール起動直後は、問題なく動くのですが、

2度目からは初期化に失敗します。

マクロ内では、tkinfo.dllとdgserver.exe、DengakuDLL.dllを

頻繁に切替え、動かしております。


骨子はこんな感じになります。

原因としてどのようなことが考えられますでしょうか。

    call sub_tkinfo;

 ○○処理
    //  サーバの終了
    ddeexecute "exit";

//-----------------サーバの仕切り---
    call Dserver;
 
 ○○処理
    //  田楽サーバの終了
    ddeexecute "exit";

    サーバー切替え繰り返し

    goto LEND;
       
//******************

Dserver:

        //田楽DLLをload
        call Dengaku;

        //$apppath = input("田楽サーバのあるフォルダを入力して下さい。",hide
marudir);
        $apppath = hidemarudir;
        //message $apppath;
        if( (!result) || $apppath == "" ) endmacro;
        if( rightstr($apppath,1) != "\\" ) $apppath = $apppath + "\\";
        if( !existfile($apppath+"dgserver.exe") ){
            message "指定されたフォルダに dgserver.exe がありません。";
            endmacro;
        }

//田楽サーバのダイアログ機能使用部−−−−−−−−−−−−−−−−
    //  田楽サーバの実行
    run $apppath + "dgserver.exe";
    if( !result ){
        message "田楽サーバの起動に失敗しました。";
        goto LEND;
    }

    //  DDE 初期化の実行
    ddeinitiate "DengakuServer", "AllService";
    if( !result ){
        message "田楽サーバとの DDE 通信の初期化に失敗しました。";
        #hwnddg = findwindowclass("DengakuServerClass");
        if( #hwnddg ) ##s = sendmessage(#hwnddg,0x0112,0xF060,0);
        goto LEND;
    }
    return;

//******************
    Dengaku:
//  田楽DLLのロード
//    message hidemarudir;
        if(existfile(hidemarudir+"\\DengakuDLL.dll")){
            loaddll hidemarudir+"\\DengakuDLL.dll";
        }
        else {
            $$mes = "田楽DLLが見つかりませんでした。\n" +
                    "田楽DLLを秀丸エディタインストールディレクトリにおいてく
ださい。\n" +
                    "  秀丸エディタインストールディレクトリ:\n\t"+hidemarudi
r + "\n\n" +
                    "田楽DLL ダウンロードURL\n"+
                    "  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/
\n" +
                    $info ;
            message $$mes ;
            goto LEND ;
        }

        if (!result) {
            message "田楽DLL をロードできませんでした。"+$info;
            goto LEND ;
        }
    return;


//******************
    sub_tkinfo:
    loaddll "tkinfo.dll";
    if( !result ) {
        message "このマクロは秀丸メールで実行してください。";
        endmacro;
    }
    if( !dllfunc("IsTuruKameMain") ) {
        message "このマクロは秀丸メール本体側で実行してください。";
        endmacro;
    }
    return;

[ ]
RE:37964 田楽サーバとの DDE 通信の初期No.37965
hirahira さん 10/03/04 11:48
 
すみません。環境を書き忘れました。

環境
  Windows XP SP3
  秀丸メールV5.34 Beta7
  秀丸V8.00 Beta30

[ ]
RE:37965 田楽サーバとの DDE 通信の初期No.37966
秀まるお2 さん 10/03/04 12:14
 
 とりあえず、こちらで簡単な再現マクロを作ってテストした限りは、マクロを
何回か実行してもエラーにはなりませんでした。テストで作ったマクロ内容は最
後に書いておきます。
 (こんなんでいいのかどうかいまいち自信ありませんけども)

 エラーになる原因として、田楽サーバーを起動したり終了したりをしていると
ダメってことがあるかもしれないです。田楽サーバーは一度起動したらずっと起
動しっぱなしで常駐させたままにした方がいいんじゃないかと思います。

 それとあと、秀丸メールの「全般的な設定・上級者向け・動作の記録」の「秀
丸メールの動作をdump.txtに記録する」をONにしておくて、ddeinitiateで失敗
した時のエラーコードなどがdump.txtに出力されます。

 例えば

12:01:31.593 (   0) ExecCommandMacroSub test.mac
12:01:31.750 (   0) DdeCallback, i=0, hconv=0x00000000
12:01:32.656 (   0) DdeConnect error code=16394

 みたいな記録が出ます。そこのエラーコードを教えていただければ何か分かる
かもしれません。


■テストに使ったマクロ------------------------------------------------------
    call sub_tkinfo;
    //  サーバの終了
    ddeexecute "exit";
//-----------------サーバの仕切り---
    call Dserver;
    message "○○処理";
    //  田楽サーバの終了
    ddeexecute "exit";
    message "サーバー切替え繰り返し";
    goto LEND;
       
//******************
Dserver:
        //田楽DLLをload
        call Dengaku;
        //$apppath = input("田楽サーバのあるフォルダを入力して下さい。",hide
marudir);
        $apppath = hidemarudir;
        //message $apppath;
        if( (!result) || $apppath == "" ) endmacro;
        if( rightstr($apppath,1) != "\\" ) $apppath = $apppath + "\\";
        if( !existfile($apppath+"dgserver.exe") ){
            message "指定されたフォルダに dgserver.exe がありません。";
            endmacro;
        }
//田楽サーバのダイアログ機能使用部−−−−−−−−−−−−−−−−
    //  田楽サーバの実行
    run $apppath + "dgserver.exe";
    if( !result ){
        message "田楽サーバの起動に失敗しました。";
        goto LEND;
    }
    //  DDE 初期化の実行
    message "ddeinitiate";
    ddeinitiate "DengakuServer", "AllService";
    if( !result ){
        message "田楽サーバとの DDE 通信の初期化に失敗しました。";
        #hwnddg = findwindowclass("DengakuServerClass");
        if( #hwnddg ) ##s = sendmessage(#hwnddg,0x0112,0xF060,0);
        goto LEND;
    }
    return;
//******************
    Dengaku:
//  田楽DLLのロード
//    message hidemarudir;
        if(existfile(hidemarudir+"\\DengakuDLL.dll")){
            loaddll hidemarudir+"\\DengakuDLL.dll";
        }
        else {
            $$mes = "田楽DLLが見つかりませんでした。\n";
            message $$mes ;
            goto LEND ;
        }

        if (!result) {
            message "田楽DLL をロードできませんでした。"+$info;
            goto LEND ;
        }
    return;


//******************
    sub_tkinfo:
    loaddll "tkinfo.dll";
    if( !result ) {
        message "このマクロは秀丸メールで実行してください。";
        endmacro;
    }
    if( !dllfunc("IsTuruKameMain") ) {
        message "このマクロは秀丸メール本体側で実行してください。";
        endmacro;
    }
    return;

LEND:
 endmacro;
-------------------------------------------------------------------------

[ ]
RE:37966 田楽サーバとの DDE 通信の初期No.37968
hirahira さん 10/03/04 13:11
 
dump.txtです。

上手く行った時と、その後、失敗したときのものです。

13:03:50.718 (   0) ExecCommandMacroSub mail-2010-03-03-2.mac
13:03:50.750 (8108) FrameWnd:TKINFO 34
13:03:50.750 (2439) TKINFO 34
13:03:50.750 (5061) tkinfo 34
13:03:50.750 (8111) FrameWnd:TKINFO 34 return 00000000
13:03:52.625 (   0) DdeCallback, i=0, hconv=0x0B000580
13:03:53.250 (   0) DdeCallback, i=0, hconv=0x0B000580
13:03:53.296 (   0) DdeCallback, i=0, hconv=0x0B000580
13:03:53.296 (   0) DdeCallback, i=0, hconv=0x0B000580
13:03:53.296 (8108) FrameWnd:TKINFO 4
13:03:53.296 (2439) TKINFO 4
13:03:53.296 (5061) tkinfo 4
13:03:53.296 (8111) FrameWnd:TKINFO 4 return 00000001
13:03:53.296 (8108) FrameWnd:TKINFO 3
13:03:53.296 (2439) TKINFO 3
13:03:53.296 (5061) tkinfo 3
13:03:53.296 (8111) FrameWnd:TKINFO 3 return 00000000
13:03:53.296 (8108) FrameWnd:TKINFO 3
13:03:53.296 (2439) TKINFO 3
13:03:53.312 (5061) tkinfo 3
13:03:53.312 (8111) FrameWnd:TKINFO 3 return 00000000
13:03:53.312 (8108) FrameWnd:TKINFO 3
13:03:53.312 (2439) TKINFO 3
13:03:53.312 (5061) tkinfo 3
13:03:53.312 (8111) FrameWnd:TKINFO 3 return 00000001
13:03:53.312 (8108) FrameWnd:TKINFO 16
13:03:53.312 (2439) TKINFO 16
13:03:53.312 (8111) FrameWnd:TKINFO 16 return 00000004
13:03:53.312 (8108) FrameWnd:TKINFO 95
13:03:53.312 (2439) TKINFO 95
13:03:53.312 (5061) tkinfo 95
13:03:53.312 (20335) MuteOther()
13:03:53.312 (20398) MuteOther: OBJECT_0
13:03:53.312 ( 685) ProcessExecEvent
13:03:53.312 (1288) ProcessExecEvent exit
13:03:53.312 ( 685) ProcessExecEvent
13:03:53.312 (1288) ProcessExecEvent exit
13:03:53.312 (20485) ReleaseMuteOther()
13:03:53.312 (8111) FrameWnd:TKINFO 95 return 00000000
13:03:53.312 (8108) FrameWnd:TKINFO 96
13:03:53.312 (2439) TKINFO 96
13:03:53.312 (5061) tkinfo 96
13:03:53.312 (20335) MuteOther()
13:03:53.312 (20398) MuteOther: OBJECT_0
13:03:53.312 ( 685) ProcessExecEvent
13:03:53.312 (1288) ProcessExecEvent exit
13:03:53.328 ( 685) ProcessExecEvent
13:03:53.328 (1288) ProcessExecEvent exit
13:03:53.328 (20485) ReleaseMuteOther()
13:03:53.328 (8111) FrameWnd:TKINFO 96 return 00000001
13:03:53.359 (8108) FrameWnd:TKINFO 3
13:03:53.359 (2439) TKINFO 3
13:03:53.359 (5061) tkinfo 3
13:03:53.359 (8111) FrameWnd:TKINFO 3 return 00000001
13:03:53.359 (8108) FrameWnd:TKINFO 15
13:03:53.359 (2439) TKINFO 15
13:03:53.359 (8111) FrameWnd:TKINFO 15 return 89610000
13:03:53.375 (8108) FrameWnd:TKINFO 97
13:03:53.375 (2439) TKINFO 97
13:03:53.375 (5061) tkinfo 97
13:03:53.375 (20335) MuteOther()
13:03:53.375 (20398) MuteOther: OBJECT_0
13:03:53.375 ( 685) ProcessExecEvent
13:03:53.375 (1288) ProcessExecEvent exit
13:03:53.375 ( 685) ProcessExecEvent
13:03:53.375 (8663) 4 / 3月4日メール数=4
13:03:53.375 (1288) ProcessExecEvent exit
13:03:53.390 (20485) ReleaseMuteOther()
13:03:53.390 (8111) FrameWnd:TKINFO 97 return 00000001
13:03:53.421 (8108) FrameWnd:TKINFO 95
13:03:53.421 (2439) TKINFO 95
13:03:53.421 (5061) tkinfo 95
13:03:53.421 (20335) MuteOther()
13:03:53.421 (20398) MuteOther: OBJECT_0
13:03:53.421 ( 685) ProcessExecEvent
13:03:53.421 (1288) ProcessExecEvent exit
13:03:53.421 ( 685) ProcessExecEvent
13:03:53.421 (1288) ProcessExecEvent exit
13:03:53.421 (20485) ReleaseMuteOther()
13:03:53.421 (8111) FrameWnd:TKINFO 95 return 0000000E
13:03:53.421 (8108) FrameWnd:TKINFO 96
13:03:53.421 (2439) TKINFO 96
13:03:53.421 (5061) tkinfo 96
13:03:53.421 (20335) MuteOther()
13:03:53.421 (20398) MuteOther: OBJECT_0
13:03:53.421 ( 685) ProcessExecEvent
13:03:53.421 (1288) ProcessExecEvent exit
13:03:53.421 ( 685) ProcessExecEvent
13:03:53.437 (1288) ProcessExecEvent exit
13:03:53.437 (20485) ReleaseMuteOther()
13:03:53.437 (8111) FrameWnd:TKINFO 96 return 00000001
13:03:53.468 (8108) FrameWnd:TKINFO 3
13:03:53.468 (2439) TKINFO 3
13:03:53.468 (5061) tkinfo 3
13:03:53.468 (8111) FrameWnd:TKINFO 3 return 00000001
13:03:53.468 (8108) FrameWnd:TKINFO 3
13:03:53.468 (2439) TKINFO 3
13:03:53.468 (5061) tkinfo 3
13:03:53.468 (8111) FrameWnd:TKINFO 3 return 00000001
13:03:53.609 (   0) DdeCallback, i=0, hconv=0x00000000
13:03:56.125 (2443) tkinof.dll: EnvChagned called
13:03:56.125 (8108) FrameWnd:TKINFO 70
13:03:56.125 (2439) TKINFO 70
13:03:56.125 (9129) EnterTrans
13:03:56.125 (9157) Trans mutex
13:03:56.156 (8665) -
13:03:56.250 (13587) EnvChagned fFilterLog=0
13:03:56.250 (9232) LeaveTrans()
13:03:56.250 (8111) FrameWnd:TKINFO 70 return 00000001
13:03:56.250 (2445) tkinfo.dll: EnvChanged return
13:03:56.250 (   0) DdeCallback, i=0, hconv=0x0F000580
13:03:56.390 (   0) DdeCallback, i=0, hconv=0x00000000
13:03:59.390 (   0) DdeCallback, i=0, hconv=0x51000580
13:03:59.390 (8108) FrameWnd:TKINFO 18
13:03:59.390 (2439) TKINFO 18
13:03:59.406 (8111) FrameWnd:TKINFO 18 return 00000001
13:03:59.406 (8108) FrameWnd:TKINFO 245
13:03:59.406 (2439) TKINFO 245
13:03:59.406 (8111) FrameWnd:TKINFO 245 return 00000001
13:03:59.406 (13604) Cmd 40323
13:03:59.406 (3200) CAttachPane::SaveAs()
13:03:59.406 (3344) will GetSaveFileNameW
13:03:59.453 (3021) SaveAsHookProc: initdialog
13:03:59.453 (3107) SaveAsHistoryHookProc: initdone
13:03:59.453 (3040) SaveAsHookProc: initdone
13:03:59.609 (3121) SaveAsHistoryHookProc: fileok
13:03:59.609 (3046) SaveAsHookProc: fileok
13:03:59.640 (3346) done
13:03:59.718 (3581) will SaveAttachAfter
13:03:59.718 (10099) DialogBox2Param() template=454
13:03:59.765 (10137) DialogBox2Param() exit
13:03:59.765 (3583) done
13:03:59.765 (15119) 40323 ret 1
13:03:59.781 (8108) FrameWnd:TKINFO 212
13:03:59.781 (2439) TKINFO 212
13:03:59.781 (2819) DisableDraw
13:03:59.781 (9841) AlterSave ○○○○ file=送信済み201003.txt offset=22259
prevsize=1140
13:03:59.781 (12950) NotifyListCacheOffsetMoved
13:03:59.781 (9981) SetView pTitle=045F9680 cb=1156 off=22259
13:03:59.796 ( 952) f:\TuruKameData\○○○○\送信添付\100304_04\○○○○.xdw
13:03:59.796 (2119) SetText at pHidemaruView
13:03:59.796 (2151) cmdReasonCreated=open
13:03:59.796 (2819) EnableDraw
13:03:59.812 (8111) FrameWnd:TKINFO 212 return 00000001
13:03:59.859 (8147) leave
13:03:59.859 (15119) 42001 ret 1
13:04:02.125 (9981) SetView pTitle=045F95F8 cb=1242 off=21015
13:04:02.125 ( 952) f:\TuruKameData\○○○○m\送信添付\100304_03\○○○○.pdf
13:04:02.125 (2119) SetText at pHidemaruView
13:04:02.125 (2151) cmdReasonCreated=open
13:04:02.140 (9981) SetView pTitle=045F95F8 cb=1242 off=21015
13:04:02.140 (10064) same return
13:04:03.390 (13604) Cmd 42001
13:04:03.390 (8117) entered
13:04:03.390 (   0) ExecCommandMacroSub mail-2010-03-03-2.mac
13:04:03.390 (8108) FrameWnd:TKINFO 34
13:04:03.390 (2439) TKINFO 34
13:04:03.390 (5061) tkinfo 34
13:04:03.390 (8111) FrameWnd:TKINFO 34 return 00000000
13:04:04.234 (   0) DdeCallback, i=0, hconv=0x52000580
13:04:04.984 (   0) DdeCallback, i=0, hconv=0x52000580
13:04:05.031 (   0) DdeCallback, i=0, hconv=0x52000580
13:04:05.031 (   0) DdeCallback, i=0, hconv=0x52000580
13:04:05.046 (8108) FrameWnd:TKINFO 4
13:04:05.046 (2439) TKINFO 4
13:04:05.046 (5061) tkinfo 4
13:04:05.046 (8111) FrameWnd:TKINFO 4 return 00000001
13:04:05.046 (8108) FrameWnd:TKINFO 3
13:04:05.046 (2439) TKINFO 3
13:04:05.046 (5061) tkinfo 3
13:04:05.046 (8111) FrameWnd:TKINFO 3 return 00000000
13:04:05.046 (8108) FrameWnd:TKINFO 3
13:04:05.046 (2439) TKINFO 3
13:04:05.046 (5061) tkinfo 3
13:04:05.046 (8111) FrameWnd:TKINFO 3 return 00000000
13:04:05.046 (8108) FrameWnd:TKINFO 3
13:04:05.046 (2439) TKINFO 3
13:04:05.046 (5061) tkinfo 3
13:04:05.046 (8111) FrameWnd:TKINFO 3 return 00000001
13:04:05.046 (8108) FrameWnd:TKINFO 16
13:04:05.046 (2439) TKINFO 16
13:04:05.046 (8111) FrameWnd:TKINFO 16 return 00000004
13:04:05.046 (8108) FrameWnd:TKINFO 95
13:04:05.046 (2439) TKINFO 95
13:04:05.046 (5061) tkinfo 95
13:04:05.062 (20335) MuteOther()
13:04:05.062 (20398) MuteOther: OBJECT_0
13:04:05.062 ( 685) ProcessExecEvent
13:04:05.062 (1288) ProcessExecEvent exit
13:04:05.062 ( 685) ProcessExecEvent
13:04:05.062 (1288) ProcessExecEvent exit
13:04:05.062 (20485) ReleaseMuteOther()
13:04:05.062 (8111) FrameWnd:TKINFO 95 return 00000000
13:04:05.062 (8108) FrameWnd:TKINFO 96
13:04:05.062 (2439) TKINFO 96
13:04:05.062 (5061) tkinfo 96
13:04:05.062 (20335) MuteOther()
13:04:05.062 (20398) MuteOther: OBJECT_0
13:04:05.062 ( 685) ProcessExecEvent
13:04:05.062 (1288) ProcessExecEvent exit
13:04:05.062 ( 685) ProcessExecEvent
13:04:05.062 (1288) ProcessExecEvent exit
13:04:05.062 (20485) ReleaseMuteOther()
13:04:05.062 (8111) FrameWnd:TKINFO 96 return 00000001
13:04:05.093 (8108) FrameWnd:TKINFO 3
13:04:05.093 (2439) TKINFO 3
13:04:05.093 (5061) tkinfo 3
13:04:05.093 (8111) FrameWnd:TKINFO 3 return 00000001
13:04:05.109 (8108) FrameWnd:TKINFO 15
13:04:05.109 (2439) TKINFO 15
13:04:05.109 (8111) FrameWnd:TKINFO 15 return 89610000
13:04:05.109 (8108) FrameWnd:TKINFO 97
13:04:05.109 (2439) TKINFO 97
13:04:05.109 (5061) tkinfo 97
13:04:05.109 (20335) MuteOther()
13:04:05.109 (20398) MuteOther: OBJECT_0
13:04:05.109 ( 685) ProcessExecEvent
13:04:05.109 (1288) ProcessExecEvent exit
13:04:05.109 ( 685) ProcessExecEvent
13:04:05.109 (8663) 5 / 3月4日メール数=4
13:04:05.109 (1288) ProcessExecEvent exit
13:04:05.109 (20485) ReleaseMuteOther()
13:04:05.109 (8111) FrameWnd:TKINFO 97 return 00000001
13:04:05.125 (8108) FrameWnd:TKINFO 95
13:04:05.125 (2439) TKINFO 95
13:04:05.125 (5061) tkinfo 95
13:04:05.125 (20335) MuteOther()
13:04:05.125 (20398) MuteOther: OBJECT_0
13:04:05.125 ( 685) ProcessExecEvent
13:04:05.125 (1288) ProcessExecEvent exit
13:04:05.125 ( 685) ProcessExecEvent
13:04:05.125 (1288) ProcessExecEvent exit
13:04:05.125 (20485) ReleaseMuteOther()
13:04:05.125 (8111) FrameWnd:TKINFO 95 return 0000000E
13:04:05.140 (8108) FrameWnd:TKINFO 96
13:04:05.140 (2439) TKINFO 96
13:04:05.140 (5061) tkinfo 96
13:04:05.140 (20335) MuteOther()
13:04:05.140 (20398) MuteOther: OBJECT_0
13:04:05.140 ( 685) ProcessExecEvent
13:04:05.140 (1288) ProcessExecEvent exit
13:04:05.140 ( 685) ProcessExecEvent
13:04:05.140 (1288) ProcessExecEvent exit
13:04:05.140 (20485) ReleaseMuteOther()
13:04:05.140 (8111) FrameWnd:TKINFO 96 return 00000001
13:04:05.156 (8108) FrameWnd:TKINFO 3
13:04:05.156 (2439) TKINFO 3
13:04:05.156 (5061) tkinfo 3
13:04:05.156 (8111) FrameWnd:TKINFO 3 return 00000001
13:04:05.156 (8108) FrameWnd:TKINFO 3
13:04:05.156 (2439) TKINFO 3
13:04:05.156 (5061) tkinfo 3
13:04:05.156 (8111) FrameWnd:TKINFO 3 return 00000001
13:04:05.265 (   0) DdeCallback, i=0, hconv=0x00000000
13:04:07.171 (2443) tkinof.dll: EnvChagned called
13:04:07.171 (8108) FrameWnd:TKINFO 70
13:04:07.171 (2439) TKINFO 70
13:04:07.171 (9129) EnterTrans
13:04:07.171 (9157) Trans mutex
13:04:07.203 (8665) -
13:04:07.250 (13587) EnvChagned fFilterLog=0
13:04:07.250 (9232) LeaveTrans()
13:04:07.250 (8111) FrameWnd:TKINFO 70 return 00000001
13:04:07.250 (2445) tkinfo.dll: EnvChanged return
13:04:07.250 (   0) DdeCallback, i=0, hconv=0x56000580
13:04:07.312 (   0) DdeCallback, i=0, hconv=0x00000000
13:04:07.343 (   0) DdeConnect error code=16394
13:04:09.265 (8147) leave
13:04:09.265 (15119) 42001 ret 1
13:04:13.578 (7383) syscommand 0xF095
13:04:13.578 (7444) will DefWindowProc
13:04:15.281 (7448) DefWindowProc done nRet = 00000000
13:04:15.281 (13604) Cmd 40017

[ ]
RE:37968 田楽サーバとの DDE 通信の初期No.37969
秀まるお2 さん 10/03/04 14:03
 
 エラーコードが0x400Aなんですけど、これは、

   DMLERR_NO_CONV_ESTABLISHED

 というエラーでして、DDEサーバーが存在してない時に出るエラーってことに
なります。

 例えば「ddeinitiate "xxxx", "xxx";」みたいなでたらめなパラメータで呼び
出してもこのエラーが出ます。

 ということで、たぶんですけど、エラーになった瞬間にはまだ田楽サーバーが
起動してないか、起動してるにしても、DDEサーバーとしての準備が整ってない
タイミングってことじゃないかと思います。

 とりあえず、田楽サーバーをずっと起動しっぱなしにする("exit"を実行させ
ない)作戦でどうでしょ?

 それか、ddeinitiateに失敗したら、例えば1秒くらいウェイトして再試行す
るとか…

    ddeinitiate "DengakuServer", "AllService";
    if( !result ){
        #hwnddg = findwindowclass("DengakuServerClass");
        if( #hwnddg == 0 ) {
            run $apppath + "dgserver.exe";
        }
        #tick = tickcount;
        while( tickcount - #tick < 500 ) {
            //
        }
        ddeinitiate "DengakuServer", "AllService";
        if( !result ){
            message "やっぱりエラーです";
            endmacro;
        }
    }

 とか。

 その辺試していただくしか無いような気がします。

 それか、確実にエラーが再現できるマクロがあれば、それの内容を教えていた
だければこちらでも再現テストしてみます。

[ ]
RE:37969 田楽サーバとの DDE 通信の初期No.37971
hirahira さん 10/03/04 17:37
 
> とりあえず、田楽サーバーをずっと起動しっぱなしにする("exit"を実行させ
>ない)作戦でどうでしょ?

この作戦でいく場合、

「dllfunc関数で指定された呼び出し先が見つかりません」

と言われてしまします。

以下の部分が問題みたいなのですが、

この機能について、田楽を使わない方法があるでしょうか。

//空白は「無」に置き換える
//田楽の機能を利用
    $NameDay2 = dllfuncstr("GSUB",$NameDay," ","",-1);
    $NameDay2 = dllfuncstr("GSUB",$NameDay2," ","",-1);


> それか、ddeinitiateに失敗したら、例えば1秒くらいウェイトして再試行すると
>か…


ウエイトの方も試してみましたが、これで概ね上手くいくようです。

ただ、ときどき、やはり上手く行かない場合もあり、

上記の起動しっぱなし作戦に乗り換えようと思います。

ありがとうございます。

[ ]
RE:37971 田楽サーバとの DDE 通信の初期No.37972
杉浦 まさき さん 10/03/04 18:34
 
田楽鯖&DLL作者の杉浦です。
#先週母が他界した関係で掲示板をチェックできておらず、
 レスポンスが遅くなってすみません。

>ウエイトの方も試してみましたが、これで概ね上手くいくようです。
>ただ、ときどき、やはり上手く行かない場合もあり、
>上記の起動しっぱなし作戦に乗り換えようと思います。

既にほぼ解決しているようですが、
田楽サーバの起動時間は確かに遅いです。。
ただ、必要な処理を行う時間なので
これ以上速くするのはちょっと難しいです。

ということで、田楽サーバを連続利用する場合
exitを使わずにddeterminateでしのいでいただくか、
秀丸マクロで複数のDLLをロードするためのDLLを
利用して田楽DLLの方をご利用いただくか、
というのが今のところの回避策となるかと。。

[ ]
RE:37972 田楽サーバとの DDE 通信の初期No.37973
Iranoan さん 10/03/04 18:57
 
 hirahira さん今日は、一ユーザの Iranoan です。
> 秀丸マクロで複数のDLLをロードするためのDLLを
> 利用して田楽DLLの方をご利用いただくか、
 これに関しては、tkinfo.dll に、まさしくこのための LoadDll()/DllFunc
()/FreeDll() 関数が用意されていますね。

> この機能について、田楽を使わない方法があるでしょうか。
<snip>
>     $NameDay2 = dllfuncstr("GSUB",$NameDay," ","",-1);
に付いては、文字列を置換しているだけなので、サブルーチンを使ってはどう
でしょう?
//------------------------------------------------------------
  call ChangeCharacter $NameDay," ","";
  $NameDay2 = $$return;
      :
      :
      :
endmacro;

ChangeCharacter://buffer 中の文字列を置換
//$$1:buffer
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:37972 田楽サーバとの DDE 通信の初期No.37974
hirahira さん 10/03/04 19:42
 
>田楽鯖&DLL作者の杉浦です。

作者様からコメント頂き恐縮です。

教えて頂いた通り、

loaddll "tkinfo.dll";
$$filename =hidemarudir+"\\DengakuDLL.dll";
#dll = dllfunc("LoadDll",$$filename );

とし、DLLつなぎっぱなし作戦に成功しました。

いつも、田楽にお世話になりっぱなしで、

この場をお借りして、お礼申し上げます。m(_ _)m

[ ]
RE:37973 田楽サーバとの DDE 通信の初期No.37975
hirahira さん 10/03/04 19:50
 
Iranoan様、ありがとうございます。

いつも、ご活躍、拝見しております。

教えて頂いたサブルーチンを使用し、無事エラー回避できました。

>  call ChangeCharacter $NameDay," ","";
>  $NameDay2 = $$return;
>      :
>      :

また、秀まる2さんにご教示頂いたウエイト作戦も、以下に示す

別な箇所に盛り込み、ホクホク顔です。

これまで、レジストリに書き込んだディレクトリを

SAVEASで開き直すときに、タイミングがあわず、

変なディレクトリが開かれたり、していたのですが、

この部分にTime_wait 500を放り込み、やや、もっさり感はあるものの、

確実な動作になってきたように思います。

みなさまの貴重なご意見に、ただただ、感謝致します。m(_ _)m

ありがとうございました。


//フォルダ作成
    ddeexecute "mkdir /n " + $NameDay2;
//フォルダ作成に成功したか否か
//・処理の結果コード(result)
//  0: 成功
//  1: 失敗
    ##r1 = val(dderequest("fileopresult"));
   
    if( !##r1 ){
//          message "フォルダ作成に成功しましたよ";
        //ディレクトリを書き換え
        writeregstr "ExpDir", $strDir + "\\" + $NameDay2;
//      message $strDir + "\\"+ $NameDay2;

    }else{
        //ディレクトリを書き換え
        writeregstr "ExpDir", $strDir;
        message "フォルダ作成に失敗しています。";
    }
   
//レジストリを閉じて
    closereg;
//秀丸に読み込ませる
    #n = dllfunc("EnvChanged", 1);
//ウエイトをかました方が上手く動作するようなので、0.5秒待つ
    call Time_wait 500;

//クリックボードにフォルダ名を保存
    beginclipboardread;
    setclipboard $NameDay2;

    call Time_wait 500;

//名前を付けて保存(秀丸エディタマクロ)
    SAVEAS;

[ ]