続cygwinでASIO
IASIOのメンバ呼び出しをインラインアセンブラで書き直しました。もう全然C++じゃないです。
inline ::ASIOBool asio_init(::IASIO* this_ptr, void *sys_handle) { ::ASIOBool result; __asm__ ( "mov %2, %%eax\n\t" "push %%eax\n\t" "mov %1, %%ecx\n\t" "mov (%%ecx), %%edx\n\t" "mov %1, %%ecx\n\t" "mov 0xc(%%edx), %%eax\n\t" "call *%%eax" : "=a" (result) : "m" (this_ptr), "m" (sys_handle) : "%ecx", "%edx" ); return result; }
こんなのをひたすら手書きしてました。vtblのオフセットも手計算です。
一応動いてますが、合ってるかどうかは不明、、、。
なお、GCCのインラインアセンブラの文法に関しては以下のサイトを参考にしました。
http://www.mars.sannet.ne.jp/sci10/on_gcc_asm.html
これでなんとかCygwinでもASIOが使えるようになりました。
今日の成果物
次はMinGWです。やはりコンパイルはできても動きません。
ASIOの中でクラッシュするので、gdbから実行してみたところ、なぜかすんなり動くという謎現象が発生中。