V9.32β4No.11590
秀丸担当 さん 24/03/13 15:37
 
V9.32β4を公開しました。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm932b4_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm932b4_x64_signed.exe

[ ]
RE:11590 V9.32β4No.11591
こみやんま さん 24/03/13 17:10
 
keepdll とりあえず、最低限の動作だけ確認してみました。
終了reason「5」でちゃんと来ているようです。

jsの中で読んだ場合とか、ファイル閉じた際に、この解放タイミングと
js空間のどちらの破棄が早いのか、とかは一切確認していません。
(そこに依存するプログラム自体やべーだろうと思いますしおすし)

とりあえず、秀丸x86とx64で、dll作成代表のC++とC#の代表格で確認してみました。

keepdll とりあえず、最低限の動作だけ確認してみました。
終了reason「5」でちゃんと来ているようです。

jsの中から、
@あえて古い仕様のloaddll_org_みたいなのを作成して、dll読み込んだ場合の挙動
とか、
Aファイル閉じた際に、この解放タイミングとjs空間のどちらの破棄が早いのか、と
かは一切確認していません。
(そこに依存するプログラム自体やべーだろうと思いますし おすし)

とりあえず、以下のx86とx64で、dll作成代表のC++とC#の代表格で確認してみた分に
は処理は来ています。

==x86/32bit=============================================

秀丸 x86通常版で確認

--.cpp----------------------------------------------

C++20 x86 ネイティブコンパイル (nugetで HmCppInvoke vs2022使用)

#include "HmCppInvoke.h"

using namespace Hidemaru;
using namespace std;



extern "C" __declspec(dllexport) THmNumber DllDetachFunc_After_Hm866(THmNumb
er n) {

    Hm.funcDllExport();

    Hm.OutputPane.output(to_wstring(n) + L"\r\n");
    return 0;
}

--.mac---------------------------------------------

#dll = loaddll(currentmacrodirectory + @"\dll1.dll");
keepdll #dll, 3;

===============================================


==x64/64bit=============================================

秀丸 x64通常版で確認

--.cs---------------------------------------------

C# .NET8 AOT x64ネイティブコンパイル

using System.Runtime.InteropServices;

namespace ConsoleApp8
{
    public class Program
    {
        [UnmanagedCallersOnly(EntryPoint = "DllDetachFunc_After_Hm866")]

        public static void OnReleaseDll(nint reason)
        {
            System.Diagnostics.Trace.WriteLine("理由" + reason);

        }
    }
}

--.mac------------------------------------

#dll = loaddll(currentmacrodirectory + @"\ConsoleApp8.dll");
keepdll #dll, 3;

===============================================


[ ]
RE:11590 V9.32β4No.11593
ohtorii さん 24/03/14 09:20
 
> Windows11用のコンテキストメニュー拡張のデジタル署名し直し。

問題なく動作しました
ご対応いただきありがとうございます

よろしくお願いいたします

[ ]
RE:11591 V9.32β4No.11594
秀丸担当 さん 24/03/14 13:26
 
早速のご確認ありがとうございます。
とりあえずkeepdllだけでしてみましたが、keepobjectのほうはしていなくて、そっ
ちもしていこうと思います。

[ ]
RE:11593 V9.32β4No.11595
秀丸担当 さん 24/03/14 13:26
 
ご確認ありがとうございます。
連絡いただき助かりました。

[ ]
RE:11594 V9.32β4No.11598
こみやんま さん 24/03/15 13:17
 
>早速のご確認ありがとうございます。
>とりあえずkeepdllだけでしてみましたが、keepobjectのほうはしていなくて、そっ
>ちもしていこうと思います。

もうちっと調べてみましたが、
プロセス内でファイルを閉じて無題になった時(プロセスが生きてるパターン)の際
には、
どのタイミングでjsmodeを閉じてますかね?


@プロセス自体が閉じてしまう場合はそもそもリーズン5ではなく、リーズン3となる。
 即ち、理由はファイルを閉じたよりもプロセスが終了したが優先
 (この場合を考えるとやはりjsにaddEventHandlerなりaddEventListenerなりあった
ほうがいいんでないかなーと思いますが...)

Aプロセス残留(開いてるファイル→無題)の場合が焦点。

以下のパターンだとファイルにぶら下がっているjs空間にアクセスできたので、

----.cpp------------------------------
#include "HmCppInvoke.h"

using namespace Hidemaru;
using namespace std;



extern "C" __declspec(dllexport) THmNumber DllDetachFunc_After_Hm866(THmNumb
er n) {

    Hm.funcDllExport();

    Hm.OutputPane.output(to_wstring(n) + L"\r\n");
    OutputDebugString((to_wstring(n) + L"\r\n").c_str());
    Hm.Macro.Exec.doEval(
        L"$b = getstaticvariable(\"space\", 1);"
        L"message($b);"
        L"jsmode $b;"
        L"js{"
        L"debuginfo(2);"
        L"console.log(a);"
        L"console.log('\\n'); }");
    return 0;
}

----.mac------------------------------
// dllの呼び出し。dll1.dllのところは実際にコンパイルされたdll名に置き換える
こと。
#dll = loaddll(currentmacrodirectory + @"\dll1.dll");

keepdll #dll, 3;

js {
debuginfo(2);
console.log(hidemaru.getJsMode());
var a = 300;
hidemaru.setStaticVariable("space", hidemaru.getJsMode(), 1);
}


--------------------------------------

この時は、DllDetachFunc_After_Hm866のC++側からjsmodeの「a(=300)」が見えてい
るので、

ファイルを閉じる
 →ファイルを閉じる前の(自動マクロ等)event
  →ファイルを閉じた後の(自動マクロ等)event
   →keepdll 3ならDllDetachFunc_After_Hm866なりのdetatchFunc呼ぶ
    →ファイルにぶら下がっていたjsmodeスクリプト空間破棄

みたいになってるんでしょうか。



[ ]
RE:11598 V9.32β4No.11600
秀丸担当 さん 24/03/18 10:00
 
解放の順番は、いまのところは確かにそうなっていると思います。
これを仕様として保証するかどうかは、わからないです。
もしかしたら作っていくうちに、何かの都合で変えることあるかもしれないです。

[ ]
RE:11594 keepobject の 3No.11647
こみやんま さん 24/05/17 18:23
 
>早速のご確認ありがとうございます。
>とりあえずkeepdllだけでしてみましたが、keepobjectのほうはしていなくて、そっ
>ちもしていこうと思います。

こちらは「あ、忘れとった」みたいな感じでしょうかw

[ ]
RE:11647 keepobject の 3No.11651
秀丸担当 さん 24/05/20 09:56
 
keepobjectの3は確かにしていませんでした。
次でできるように修正します。

[ ]