|
アカウントが多いのでアカウントグループごとのアカウントリストを作成するマクロ
を書こうとして、
取得したアカウントグループの格納にScripting.Dictionaryを使おうとしています。
で、下記テストマクロを実行すると、Scripting.DictionaryのExistsメソッドでエ
ラーが出たり出なかったりします。
一つ目と二つ目のアカウントは同じアカウントグループです。
現象1:実行1回目は二つ目のExistsでエラー(0x80004005)になる(一つ目は正常)
現象2:もう一度実行すると今度は一つ目のExistsでエラー(0x80004005)になる
現象3:実行を続けると上記を繰り返す(一つ目ばかりになったり二つ目ばかりにな
ったりはしない)
現象4:二つ目のSelectFolderをコメントアウトするとエラーは出ない。
当然取得されるグループは一つ目のアカウントの物ですが同じグループ名です。
なお、まだAddはしていないのでハッシュの中は空のままです。
あと、現象1が一つ目のExistsでエラーの時もあります。
呼び出し方など問題があれば指摘してください。
Scripting.Dictionary自体は秀丸エディタのマクロで普通に使えてますので、
秀丸メール側で使った時、しかもSelectFolderとの組み合わせでのみ(それ以外にも
あるかもしれませんが)起こる現象のようです。
==環境==
[Windows]
エディション:Windows 10 Pro 64bit
バージョン:22H2
OSビルド:19045.5131
[秀丸メール]
バージョン:7.33 64bit
//テストマクロ
//テストマクロ
loaddll "TKInfo.dll";
if( !result ) {
message "TKInfoがロードできませんでした\n";
endmacro;
}
call CreateDictionary;
#objHash = ##return;
if(#objHash == 0) {
message "createobjectエラーになりました(Scripting.Dictionary):"+hex(#comErr);
endmacro;
}
call debugon;
$$account = dllfuncstr("Account", 0);
call deb_output "$$account:" + $$account;
if($$account != "") {
##n = dllfunc( "SelectFolder", $$account, "");
call deb_output "SelectFolder:" + str(##n);
if(##n == 1) {
$$account_group = dllfuncstr( "CurrentAccountGroup");
call deb_output "$$account_group:" + $$account_group;
##ret = callmethod_returnnum(#objHash, "Exists", $$account_group);
call deb_output "Exists:" + $$account_group + "=" + str(##ret);
if( getresultex(10) == false ) { // 失敗
#comErr = getresultex(11);
$$txt = "Existsメソッドがエラーになりました:"+$$account_group+":"+hex(#c
omErr);
call deb_output $$txt;
message $$txt;
call debugoff;
goto macro_end;
}
}
}
$$account = dllfuncstr("Account", 1);
call deb_output "$$account:" + $$account;
if($$account != "") {
##n = dllfunc( "SelectFolder", $$account, "");
call deb_output "SelectFolder:" + str(##n);
if(##n == 1) {
$$account_group = dllfuncstr( "CurrentAccountGroup");
call deb_output "$$account_group:" + $$account_group;
##ret = callmethod_returnnum(#objHash, "Exists", $$account_group);
call deb_output "Exists:" + $$account_group + "=" + str(##ret);
if( getresultex(10) == false ) { // 失敗
#comErr = getresultex(11);
$$txt = "Existsメソッドがエラーになりました:"+$$account_group+":"+hex(#c
omErr);
call deb_output $$txt;
message $$txt;
call debugoff;
goto macro_end;
}
}
}
call debugoff;
message "終了";
macro_end:
freedll;
releaseobject #objHash;
endmacro;
CreateDictionary:
#comErr = 0;
##objHash = createobject("Scripting.Dictionary");
if( getresultex(10) == false ) { // エラー
#comErr = getresultex(11);
return 0;
}
setpropnum ##objHash, "CompareMode", 1; // テキストモード
if( getresultex(10) == false ) { // 失敗
#comErr = getresultex(11);
return 0;
}
return ##objHash;
debugon:
setclipboard "Start Debug\n";
return;
debugoff:
addclipboard "Stop Debug\n";
return;
deb_output:
addclipboard $$1 + "\n";
return;
|
|