blochの日記

自虐ネタ以外のぐちは書かないようにしましょう

typedefの整理

NIのドキュメント370423a.pdfを並べながら、visatype.hを落ち着いて良く読んで見た。
まず、typedefは、typedef [定義済の型][エイリアス]のように使う。しかし、visatype.hには、typedefに3つの引数が付いて、
typedef ViSession _VI_PTR ViPSession;
となっている記述もある。_VI_PTRはどこにも定義されておらず、結局よくわからないのだが、おそらく「ポインタ」に関係した型キャストのような気がする。
さらに、多くの変数がViSessionとして定義されていて大変わかりにくいのだが、ここでめげずに、ViSessionが右辺にくる定義(=ViSessionが何であるかを表した定義)を探して行くと、
typedef ViObject ViSession;
が見つかるので、ViObject=ViSessionであることがわかる。そしてそのすぐ上の行に、
typedef ViUInt32 ViObject;
があるので、結局、longword=unsigned 32bit=ViUInt32=ViObject=ViSession と結論される。これで、
stat=viOpenDefaultRM(dfltRM:ViSession)
の、引数の方は片付いたので、戻し値のstat:ViStatusを探すと、
typedef ViInt32 ViStatus;
という行があるので、long=ViInt32=ViStatus とわかる。次に、戻し値statを、stat<VI_SUCCESS のように比較しているので、VI_SUCCESSを探すと、
#define VI_SUCCESS (0L)
と明記されていた。
今度はvisa32.basを見てみると、あっさり、
Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long
と書いてあり、引数はポインタ渡しのlong、戻し値もlongであるとされている。VBではunsignedという型は無いのだろうか。