オブジェクトポインタのポインタを扱うときの問題
abdev 8月 23rd, 2005//整数型 #define DEF_CHAR 0x0001 #define DEF_BYTE 0x0002 #define DEF_INTEGER 0x0003 #define DEF_WORD 0x0004 #define DEF_LONG 0x0005 #define DEF_DWORD 0x0006 #define DEF_INT64 0x0007 #define DEF_QWORD 0x0008 //実数型 #define DEF_SINGLE 0x0009 #define DEF_DOUBLE 0x000A //文字列型 #define DEF_STRING 0x000B //ポインタ型 #define DEF_PTR_VOID 0x000C #define DEF_PTR_DOUBLE 0x000D #define DEF_PTR_SINGLE 0x000E #define DEF_PTR_QWORD 0x000F #define DEF_PTR_DWORD 0x0010 #define DEF_PTR_WORD 0x0011 #define DEF_PTR_BYTE 0x0012 #define DEF_PTR_OBJECT 0x0013 #define DEF_PTR_PROC 0x0014
いきなりですが、上のコードはBasicCompiler.exeのコードの一部、内部で利用する型コードが定義されている部分です。
こうして見ると、基本型、文字列型、ポインタ型など、ABで扱うすべての型が揃っているように見えますが…
実は一つだけ足りない要素があるんです。そいつはズバリ、ポインタのポインタ!ポインタを良くわかっていない方はまたポインタかよぉ〜と言ってしまいそうですよね。ポインタがわかっているおいらもポインタのポインタをコンパイラがどのように扱うのかを考え出すとイヤになってしまいます。
ABはポインタのポインタを直接的に扱うことができません。例えば、下記のコードはエラーになります。
Dim ppRect As **RECT 〜 ppRect[0]->left=10
仕様上は何の問題もありませんが、コンパイラがオブジェクトポインタのポインタを参照しながら、同時にメンバにアクセスすることができていないんです。ちなみに、下のようにワンクッションおけば、問題ないっす。
Dim ppRect As **RECT Dim pRect As *RECT 〜 pRect=ppRect[0] pRect->left=10
こちらの事情ということになりますが、これを克服するためには書き換える部分が多数でてきて、がんばらねばなりません。
今考えている方法は、一番上に書いてある型コードの上位16ビットにポインタの階層番号を記すというものです。まぁ、いたって単純なわけで、すぐにでも実装にとりかかろうと思うのですが、何せ修正部分が30個所以上。バグがバグを引き寄せる可能性も大きいので慎重に修正をかけなければなりません。
今夜は軽井沢行きの支度とレンタカー借りがあるんで、開発は早々に切り上げて、ということなんで、また後日ってことですかね〜。Ver4.1β2を楽しみにされているユーザーの皆様、もうちょっとお待ちくださいm(__)m
Recent Comments