« 吉里吉里2 VCビルド対応の流れ | メイン | 吉里吉里2 のアセンブリコード »

2013年04月14日

吉里吉里Z 開発:: 開発メモ その1

    

Visual C++ への書き換えで生じた問題等を メモしていく。

呼び出し規約付き関数ポインタは、
int (__stdcall *funcp)(int);
このように書かないといけない。
以下のようにするとエラー。
int __stdcall (*funcp)(int);

const ポインタの参照渡しは、呼び出し側で非constポインタを渡すとエラー
int func( const int *&p );
このような関数に
int* buf = a;
func( buf );
とするとエラーになる。
const int* buf = a;
func( buf );
このように書く。

ObjectList 関係で、tObjectList の ObjT * & operator [] (tjs_int index) で * から *& に変換できないと言われる。
tVoidObjectList を void* ではなく、テンプレートで型を指定する形に書き換えた。

zlib 1.2.7 の Visual Studio 2010 のプロジェクトファイルを 2012 に変換してスタティックライブラリを作ると、リンク時に関数がないといわれる。
Visual Studio 2012 で新規にプロジェクトを作ってソースコードを入れてビルドすると問題ない。
デバッグオプション等の問題かもしれない。
後で、詳しく見てみる。

吉里吉里2 はフルスクリーン化時 Window 作り直しているが、解像度変更等しないもののみにするとこの辺り不要になるが、プラグイン等でWindowが作り替えられる前提で作られているものもある。
単純に作り替えられたとしてコールしても問題ないか、また作り替えなくても問題が出ないか検証する必要がある。

メニューをプラグイン化した場合、フルスクリーン時はメニューが機能しなくても問題ないだろうか?
ツール用途で残して欲しいのであれば、フルスクリーン時に使えなくても問題はなさそうだが……

C++ Builder では、_argc と _argv でコマンドライン引数を得られるが、Visual C++ の場合 __argc と __argv になる。
ラッピングしたものを使う方が良い。
VCL の ParamStr が使われている箇所もある。

PluginImpl.cpp で #include "GraphicsLoaderImpl.cpp" と cpp が include されている。
GraphicsLoaderImpl.cpp もプロジェクトに含まれているが、C++ Builder では通っている。
Visual C++では以下の3つのヘッダーに書き換えると通るが、疑問が残る。
#include "GraphicsLoaderImpl.h"
#include "MsgImpl.h"
#include "SysInitIntf.h"

bool へのキャスト演算子オーバーロードがうまく機能していない様子
pamra.operator bool(); 等明示的に呼び出してやるとうまくいく。
所々(tjs_int)へキャストしてboolをとっているが、bool へのキャストと tjs_int へのキャストのオーバーロードされたメソッド内部はオブジェクトの変換等で扱いが違う。
オブジェクトは tjs_int へ変換できないが、bool の場合は非NULLかどうかでの判断となっている。
これらは意図した記述なのか、単なる記述の揺れなのかよく読まないとわからない。



投稿者 Takenori : 2013年04月14日 20:56




comments powered by Disqus
Total : Today : Yesterday : なかのひと