|
>早速のご確認ありがとうございます。
>とりあえず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スクリプト空間破棄
みたいになってるんでしょうか。
|
|