忙しい。あとメモ。

ちょっと忙しかったです。で、今日発覚した、というか覚えたVisual Basic 6.0とWin32 APIのI/Fに関する仕様。
バッファを授受するAPIなんかだと

Declare Sub Hoge Lib "Kernel32" (ByRef fuga As Any)
...

Dim Buffer(0 to 100) As Byte
Call Hoge(Buffer)

なんてするんですが、このバッファをポインタにしたい時とか、Anyだとハマる。宣言をこう変えればOK。

Declare Sub Hoge Lib "Kernel32" (ByVal fuga As Long)
...

Dim PtrToBuffer As Long
'PtrToBufferはGlobalAllocしてGlobalLockしてもらってきて
Call Hoge(PtrToBuffer)

これでOK。このAPIのパラメータの型宣言を変えないでLongを食べさせると実行時エラーというか、APIがエラーを返してくる。まったくもー、「Any」とか紛らわしい事言うな!!! なんでも食べるのかと勘違いしたよ!

というか、Visual Basic 6.0で、Win32APIをなんとか、なるべく簡単に使えるようにByte配列とAnyなんて型をひねくりだしたんだけど、こう、所詮ごまかしで終ったなと。どう考えたって宣言したAPI叩く時にパラメータを積み上げるコードが、As Anyの時だけウルトラスペシャル処理になってるのが、みえみえだ。まったくもう。

こーゆー紆余曲折を経て、.NETへ向かう道筋は、明るいものだと思う。多分。

つーか、私は今さら何をしているのか・・・

んー、そうだ、Anyとか詐欺的な名前じゃなくてByteArrayRowとか、そんな型名だったらよかったのに! マイクロソフトのバカ! 死んじゃえ!