[HMM0081A] ●「DLLがロードされてないのにdllfunc関数が使われました」と表示される - 秀丸エディタQ&A集

HideMaru Editor

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


[HMM0081A]

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

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

A.

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

  • loaddll文/関数で、dllの読み込みに失敗しているのに、dllfunc/dllfuncstrを呼び出している
    • DLLの読み込みに失敗する原因としては、DLLが適切な位置に配置されていない等が考えられます。 実行するマクロと同じ場所か、マクロフォルダか、秀丸エディタ本体と同じ場所に配置するかは、 マクロの説明書等に記載されているはずなので、確認してください。
    • マクロとDLLが、同じ場所にあるにも関わらず、動作しない場合は、DLLのロード部分を確認見直してみてください。 単純にファイル名が間違っている場合もあります。
    • 64bit版秀丸エディタを使用しているのに、32bit版のDLLをロードしようとしている。
      基本的に、64bit版秀丸エディタで使用できるのは、64bit版DLLだけです。 オプションの設定で、32bit版DLLを使用する事も出来ますが、正常に動作する保証はありません。

      32bit版の互換性

    • DLLを実行するためのファイルが足りない。 VCのランタイムライブラリ等、DLLの実行に必要なファイルがない場合にもDLLのロードに失敗します。 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