[ 新規に投稿する ]

超基本 DLLがロードされていないのみdllfunc関数が使われましたNo.10413
hutec さん 24/06/05 11:34 [ コメントを投稿する ]
  いつもお世話になっております。
秀丸メール ver7.32 beta1 32bit
秀丸エディタ ver 9.34 32bit

時々、標題のメッセージが出て、それ以降debugが進められなくなる事があります。このメッセージが出始めると、しばらくは連続で出ます。何かのタイミングで、また出なくなります。たまたま、定期受信以降は出なくなった事もあります。今回、送受信を行いましたが、現在は改善されていません。再起動すると改善する事もありますが、またなってしまいます。
なにかヒントはございますか?


下記はサンプルのソースです。
loaddll "tkinfo.dll";
$text = dllfuncstr( "LoadStringFromFile", dllfuncstr("HomeDir") + "AdrBook.txt" );
message "アドレス帳のサイズ = " + str(strlen($text));
--------------------
DLLがロードされていないのみdllfunc関数が使われました
エラー箇所の内容(変換した内容):
$text = dllfuncstr( "LoadStringFromFile", dllfuncstr("HomeDir") + "AdrBook.txt" );
message "アドレス帳のサイズ = " + str(strlen($text));

宜しくお願いします
[ ]
RE:10413 超基本 DLLがロードされていないのみdllfunc関数が使われNo.10414
hutec さん 24/06/05 11:35 [ コメントを投稿する ]
  秀丸メールマクロです。
[ ]
RE:10412 コメント行による速度の影響No.10415
秀丸担当 さん 24/06/05 12:05 [ コメントを投稿する ]
  キャッシュは、元の.macと.mac.cacheが確かに同じものかどうかを検証などをしています。
オーバーヘッドと書きましたが気分の問題で、それが何か問題になることは無いと思います。

キャッシュの使い方が、キャッシュというよりソースとコンパイル結果で、EXEファイルのようにコンパイル結果だけを常に使うのであれば、また別の考え方だと思います。
それがEXEやDLLのような実行時も高速化されたバイナリが生成さるのであれば有用だと思いますが、コンパイルといってもコメント除去と予約語などをバイトコードに置き換える程度のもので、実行時は何も変わらないです。
なので、そもそも手動起動時はあまり効果無いですが、もしやるとしてもキャッシュまでで十分だと思います。
マクロ内のループのときのexecmacroは、現状のキャッシュで効果があります。
[ ]
RE:10414 超基本 DLLがロードされていないのみdllfunc関数が使No.10416
秀まるお2 さん 24/06/05 12:05 [ コメントを投稿する ]
   dllfunc呼び出しの直前でloaddllしてるのであれば、そのエラーが出るのはちょっと考えがたいです。

 お勧めの作戦として、loaddllはマクロの先頭に移動してほしいです。さらにエラーチェックも追加してほしいです。以下のような感じです。

    loaddll "tkinfo.dll";
    if( result == 0 ) {
        message "tkinfo.dllのロードに失敗しました。";
        endmacro;
    }

 さらに、もしもマクロの中でfreedllを使ってる箇所があるなら、それは削除かコメントアウトしてほしいです。

 それでも起きるなら、ちょっと理解困難な状況になるので、すみませんがエラーの起きるマクロを添付ファイルにしてメールで送って欲しいです。送り先は"maruo@mitene.or.jp"になります。
[ ]
(発言者削除)No.10417
hutec さん 24/06/05 15:02
 
[ ]
RE:10416 超基本 DLLがロードされていないのみdllfunc関数が使No.10418
hutec さん 24/06/05 15:14 [ コメントを投稿する ]
  秀丸先生さま

いつもお世話になっております。
ご指示のとおり、先頭に配置し、エラーチェックを入れたところ、
エラーがでました。
freedllは使用していません。

秀丸メールを終了し、再起動してからマクロを実行すると、
エラーが無くなります。
なにか、秀丸メールを初期化する様な1行はありますか?
[ ]
RE:10418 超基本 DLLがロードされていないのみdllfunc関数が使No.10419
秀まるお2 さん 24/06/05 16:18 [ コメントを投稿する ]
  > ご指示のとおり、先頭に配置し、エラーチェックを入れたところ、
> エラーがでました。

 「tkinfo.dllのロードに失敗しました。」のメッセージが表示されたのであれば、そもそもloaddllに失敗してるのが原因になるんだと思いますが、その失敗する原因は、すみませんが調べる手段が無いです。

 とりあえず、loaddllでロードするdllのファイル名をフルパスで指定してみてはどうでしょうか。

    loaddll "C:\\Program files (x86)\\HidemaruMail\\tkinfo.dll";

 みたいにする作戦です。

 それでもダメでしたら、あと他に何か試すとしたら、秀丸メールを64bit版にしてどうか試してみるくらいしか無いかもしれません。

 64bit版なら、

    loaddll "C:\\Program files\\HidemaruMail\\tkinfo.dll";

 にしないとダメです。

 他には・・・・、loaddllに失敗した原因を特定できる手段(WindowsのAPIからのエラーコードを分かるようにする手段、GetLastErrorってAPI呼び出しした結果を得る手段)を次のβ版で用意してみるので、それでテストしていただく作戦はどうでしょうか。

 あと、すみませんがこの話題(秀丸メールのマクロの話)は秀丸メール用の8番会議室の方にお願いしたいです。以後コメントは8番会議室の方にお願いします。
[ ]
RE:10418 超基本 DLLがロードされていないのみdllfunc関数が使No.10420
Iranoan さん 24/06/05 18:01 [ コメントを投稿する ]
  hutec さんこんにちは Iranoan です
> ご指示のとおり、先頭に配置し、エラーチェックを入れたところ、
> エラーがでました。
> freedllは使用していません。
これはやはりロードに失敗しているのでしょうね
次の要領秀丸メールのインストール先を調べて、フルパスでロードすれば良いと思います
//----------------------------------------------------------------------
openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
if(result){
    loaddll getregstr("TuruKameDir") + "tkinfo.dll";
    if( result == 0 ) {
        message "tkinfo.dllのロードに失敗しました";
        closereg;
        endmacro;
    }
}
else {
    message "秀丸メールをインストールしてください";
    endmacro;
}
closereg;
//----------------------------------------------------------------------
[ ]
RE:10420 超基本 DLLがロードされていないのみdllfunc関数が使No.10421
秀まるお2 さん 24/06/05 18:40 [ コメントを投稿する ]
   一応、tkinfo.dllのロードはパス指定しないで"tkinfo.dll"のみ指定で大丈夫なはずなんですが、とりあえずそれが本当かどうか確認いただくために、"C:\\Program files (x86)...."のような指定でどうかテストお願いした所です。

 今回はとりあえず僕のやり方でやってみてほしいです。

 あと、続きの話を8番会議室に書き込んだので、そっちの方を参照お願いします。
[ ]

[ 新規に投稿する ]