- 305 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:36:12 ]
- そいやBREW4でのmod圧縮だけど、677氏のはIModuleをルーティングしてたみたいだけど、
同じことをIAppletに対してやればいいんじゃないかな?とか思った。 本体のmodファイルの先頭(エントリポイント)をAEEClsCreateInstanceにして、 解凍用のmodファイルはAEEModule.cは全く変更せずに、AEEApplet.cのAEEClsCreateInstanceを書き換えて、 int AEEClsCreateInstance(AEECLSID ClsId, IShell* pIShell, IModule* po, void** ppObj) { void* p; IApplet pAppletProxy; // pAppletProxyに偽物のIAppletクラスを作成して渡す ... // pにUnzipしたバイナリを渡す ... // 偽物のIAppletをppObjにセット *ppObj = pAppletProxy; // 本物のAEEClsCreateInstanceを呼び出す typedef int (*ENTRY_POINT)(AEECLSID, IShell*, IModule*, void**); ENTRY_POINT pFunc = (ENTRY_POINT)p; return pFunc(ClsId, pIShell, po, &pAppletProxy->pApplet); } こんな感じのプログラムを書いて、後は AppletProxy::AddRef() とか Release() とかを AppletProxy::pApplet の方にルーティングすれば良さそうな気が。 もちろん単体では動作しなくなるし解凍用のmodのサイズがちょっとでかくなるし makefileも書き換える必要があるけど、一応出来そうな気がする。 俺はもうBREWから引退した身だから実験しようにも出来ないんだよなぁ……。 うまくやれば状況に応じてバイナリを動的に読み替えるとかも出来そうで面白そうなのに。
|

|