浮動小数点版専用のdllにコンパイル

概要

秀丸エディタ本体は通常版(=32bit整数版)、もしくは64bit版(=64bit整数版)を利用されている方がほとんどだと思いますが、
浮動小数点版といったものもあります。
浮動小数点版は、マクロとして浮動小数(=double)を取り扱うことが出来ます。

プリプロセッサに定義する

プロジェクトのプロパティで以下のように「C++」⇒「コマンドライン」に以下のように

/D "FLOATMACRO_COMPILE"

を増やすか、もしくは「C++」⇒「プリプロセッサ」のところに

;FLOATMACRO_COMPILE

を増やすかすれば良いでしょう。

浮動小数専用にすることで、「THmNumber」型は、「double」となります。

PICTURE

浮動小数点版のサンプル

THmNumber は通常は intptr_tですが、
FLOATMACRO_COMPILE を用いた 浮動小数点専用コンパイルの際は double に切り替わります。
  • C++側のソース

    dllmain.cpp
    #include "HmCppInvoke.h"
    #include <thread>
    
    using namespace Hidemaru;
    using namespace std;
    
    
    
    extern "C" __declspec(dllexport) THmNumber test(THmNumber fvalue) {
    
        Hm.funcDllExport();
    
        try {
            Hm.Macro.setVar(L"$myvar", L"abc");
            THmNumber column = Hm.Macro.getVar<THmNumber>(L"column");
    
            Hm.OutputPane.output(to_wstring(column) + +L"\r\n");
            wstring myvar = Hm.Macro.getVar<wstring>(L"$myvar");
            Hm.OutputPane.output(myvar + L"\r\n");
            Hm.Macro.doStatement(L"moveto", 3, 2);
    
            auto ret = Hm.Macro.doFunction(L"str", fvalue);
            auto str = ret.getResult<wstring>();
            Hm.OutputPane.output(str + L"\r\n");
    
            Hm.Macro.setVar(L"#aaa", -222.22);
            auto aaa = Hm.Macro.getVar<THmNumber>(L"#aaa");
            Hm.OutputPane.output(to_wstring(aaa) + L"\r\n");
        }
        catch (exception e) {
            Hm.OutputPane.output(L"エラー:" + Text::Encoding::utf8_to_utf16(e.what()) + L"\r\n");
        }
    
        return 1;
    }
    
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
    {
        return TRUE;
    }
    
  • 秀丸マクロ側のソース

    秀丸マクロ型には「setfloatmode 1;」が必要となります。
    これにより、該当のdllは浮動小数点モードとなります。

    test.mac
    setfloatmode 1;
    
    #dll = loaddll(currentmacrodirectory + @"\dll1.dll");
    #r = dllfuncw(#dll, "test", -33.2000);
    freedll(#dll);