English help on website



サンプル(Ver9.30対応版)
目次DLL側から秀丸エディタの関数呼び出し− サンプル(DLL側からマクロの情報を取得)

V9.15以降では、setstaticvariable/getstaticvariableの共有フラグに-1を指定することで、サイズの制約や他のマクロとの競合無く、DLLとマクロ間で情報を伝えることが可能です。
マクロ側では、setstaticvariableを使い、第3パラメータに-1を指定し、情報を格納します。
DLL側からは、Hidemaru_GetStaticVariableを使い、第2パラメータに-1を指定し、格納された情報を取得します。

従来では、Hidemaru_EvalMacroでDLL内からさらにdllfuncを呼んだり、あるいは別の経路で情報を伝える必要がありました。
Hidemaru_GetStaticVariableは、より簡便に渡すことが可能です。

例:マクロ側
loaddll @"C:\Folder\Test.dll";
#a = dllfunc("DllFuncTest",hidemaruhandle(0));
endmacro;

例:DLL側
#include <windows.h>

extern "C" __declspec( dllexport )
INT_PTR _cdecl DllFuncTest( INT_PTR nHwnd ) {
    HINSTANCE hinstExe = GetModuleHandle( NULL );
    BOOL (WINAPI* pfnHidemaru_EvalMacro)( const WCHAR* );
    HGLOBAL (WINAPI* pfnHidemaru_GetStaticVariable)( const WCHAR*, int );
    (FARPROC&)pfnHidemaru_EvalMacro = GetProcAddress( hinstExe, "Hidemaru_EvalMacro" );
    (FARPROC&)pfnHidemaru_GetStaticVariable = GetProcAddress( hinstExe, "Hidemaru_GetStaticVariable" );
    
    if( pfnHidemaru_EvalMacro
     && pfnHidemaru_GetStaticVariable
     ) {
        BOOL f = pfnHidemaru_EvalMacro(
            L"setstaticvariable \"hoge\", filename2, -1;"
             );
        if( f ) {
            HGLOBAL hGlobal = pfnHidemaru_GetStaticVariable( L"hoge",-1);
            if( hGlobal ) {
                WCHAR* pwsz = (WCHAR*)GlobalLock( hGlobal );
                MessageBoxW( (HWND)nHwnd, pwsz, L"マクロの情報:filename2キーワード", MB_OK );
                GlobalUnlock( hGlobal );
                GlobalFree( hGlobal );
            }
        }
    }
    return 0;
}


参照:
Hidemaru_GetStaticVariable
setstaticvariable