last updated:2023/12/27

←前へ 次へ→
機能別Q&A 質問番号順Q&A


[HMM0081A]

●「DLLがロードされてないのにdllfunc関数が使われました」と表示される

Q.
マクロを実行すると、「DLLがロードされてないのにdllfunc関数が使われました」と表示されるのですが?

A.

原因としては 以下の内容が考えられます。

  • loaddll文/関数でdllの読み込みに失敗しているのに、dllfunc/dllfuncstrを呼び出している

    DLLの読み込み失敗に関しては、[HMM0083A]●外部DLLのロードに失敗するを参照してください。

  • loaddll文/loaddll関数の有効範囲の問題

    秀丸エディタではVer.3.02以降、外部DLLを使用できるようになりましたが、以下の制限が存在します。

    • dllfunc等の関数呼び出しは、loaddll文/loaddll関数 を実行した秀丸エディタのみ可能。 dllをロードした秀丸エディタ以外では、dllfunc等の関数呼び出しは失敗する。

      マクロヘルプのDLL呼び出し機能を参照の事。

    その為、ウィンドウの切り替えに失敗していたり意図しないウィンドウの切り替えが発生してしまい、 DLLをロードしたウィンドウ以外でdllfunc等を呼び出すと、「DLLがロードされてないのにdllfunc関数が使われました」と表示されてしまいます。

    動作確認用マクロ(意図的にウィンドウを切り替えて、エラーを発生させている)

    //新しいファイルを2個開く
    newfile;
    #window1 = hidemaruhandle(0);
    newfile;
    #window2 = hidemaruhandle(0);
    
    //1番目の秀丸エディタ上で、hmjre.dllをロードする
    setactivehidemaru #window1;
    loaddll "hmjre.dll";
    if(!result){
        message "hmjre.dllのロードに失敗しました。";
        endmacro;
    }
    //関数の実行(問題なし)
    $version1 = hex(dllfunc("JreGetVersion") & 0xFFFF);
    message $version1;
    
    //2番目の秀丸エディタに移動
    setactivehidemaru #window2;
    //関数の実行(ここでエラーになるはず)
    // --> DLLがロードされてないのにdllfunc関数が使われました
    $version2 = hex(dllfunc("JreGetVersion") & 0xFFFF);
    message $version2;
    freedll;
    endmacro;

←前へ 次へ→
機能別Q&A 質問番号順Q&A