DLL初期化周り整理
monapi
staticリンク時
- user_start
- monapi_initialize_memory
- invokeFuncList [ __CTOR_LIST__はこのとき monapi_crt/monapi_implで同一のものを参照 ]
- __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
- user_start_c_impl
- main
dynamicリンク時
- dllmain
- monapi_initialize_memory
- invokeFuncList [ __CTOR_LIST__は monapi_implのものを参照 ]
- __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
- user_start
- invokeFuncList [ __CTOR_LIST__は monapiのものを参照 ]
- user_start_c_impl
- main
monalibc
staticリンク時(crtは monapi_crt.o)
- user_start
- monapi_initialize_memory
- invokeFuncList [ __CTOR_LIST__はこのとき monapi/monapi_implで同一のものを参照 ]
- 以下の2つの初期化メソッドの呼出順序は保証されないので flag を使って monapi->monalibcとなるようにしている
- __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
- __attribute__( (constructor) ) void monalibc_initialize()[ invokeFuncListの呼出しによる ]
- user_start_c_impl
- main
dynamicリンク時
- dllmain(monapi)
- monapi_initialize_memory
- invokeFuncList [ __CTOR_LIST__は monapi_implのものを参照 ]
- __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
- dllmain(monalibc)
- invokeFuncList [ __CTOR_LIST__は crt/dllmain のものを参照 ]
- __attribute__( (constructor) ) void monalibc_initialize()[ invokeFuncListの呼出しによる ]
- user_start
- invokeFuncList [ __CTOR_LIST__は monapi_crtのものを参照 ]
- user_start_c_impl
- main
注
monalibc/crt/crt.cpp も monapi.cpp のようにメモリ初期化についてフラグを参照しなければいけなくなりました。
変更済みです。
libgui
GUI.DLLは monapi-imp に依存している。
monalibcと同じ形式で dllmain で invokeFuncList を呼び、libgui_initialize を __attribute__( (constructor) )で呼びます。
libbaygui
libguiと同様
バグ
monalibc/crt/dllmain.cpp の monalibc_initializeで Stream の初期化をやるといろいろうごかなくなります。
原因がさっぱり分からないのでしばらく寝かせようと思います。
申し訳ないのですがもし可能ならば、inStream/outStream は messages.cpp にあるように必要になったときに初期化するように変更頂けないでしょうか。
→id:shotaro_tsuji