C++ による BREW 開発(2)

C++ で開発する際の最大の問題は、AEEModGen.c と AEEAppGen.c が C 言語で組まれていることだ。


これらは C 言語で組まれているので、メインアプレット構造体が MALLOC() で確保されている。
もしこの構造体になんらかのクラスをメンバとして持っていた場合、そのクラスのコンストラクタは呼ばれない。
無理矢理これを使うのであれば、AEEApplet_New() によって生成したアプレットクラスに対して placement new を呼び出す必要がある。
コンストラクタが呼ばれたからこれでいいやと思うかもしれないが、アプレットクラスのインスタンスが破棄される場合、仮想テーブルにある AEEApplet_Release() が呼び出され、この関数は FREE() しか行わないので、デストラクタが呼ばれず、非常に危険だ。
それでもやっぱり AEEAppGen.c が使いたいというのであれば、IAppletVtbl に存在する、Release 関数へのポインタを、AEEApplet_Release から別の関数へ書き換えて、その関数内で参照カウンタのデクリメントと delete を行うという、何ともバカバカしいハックを仕掛ける必要が出てくる。
さすがにこんなのはやる気がしないので、AEEAppGen.c を C++ 風に新しく作ってみることにする。