last updated:2021/06/03

←前へ 次へ→ 機能別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