ExcelVBAからWin32APIを呼び出す方法をメモ。
VBからDLL(Win32 API)を呼び出せるのは(やったことは無いけれど)当然だと思っていたけれど、VBAからも出来るとは思ってなかったなー。
C言語で作った関数の引数に対しVBAから値をどうやって渡せばいいか試行錯誤してみた。
intはByValのIntegerで渡せばいいし、int*はByRefのIntegerで渡せばいいのは、けっこう素直に出来てる。
でもchar[]はVBAのStringとは明らかに違うだろうし、どうするんだろう?と思って。
ポインターを渡したいところではByValのLongにすればいいことは分かった(試したのはNULL、すなわち0を渡すことだけど)ので、Stringのアドレスが取れればいいと考えた。
まず試したのはVB.NETにも有るAddressOf。だけどこれはメソッド専用らしい。
んでMSXでは変数のアドレスを取るのにVARPTRがあったけど、まさかVBAには無いだろうなぁと思いつつ試してみたら、コンパイルが通るし!!(爆)
(これは早速プログラミング言語比較に追加~!)
ちょっとネットで調べてみると、StrPtrやObjPtrなんてものもあるらしい。
でもStrPtrはまさに文字列用っぽいのに、何故か1文字しか渡せなかった。
結局結論としては、StringのByValで素直に渡せたみたいだけど…こんなのでいいのかなー? C言語の文字列と同じとは思えないんだけどなー。
まぁ僕が本当にやりたかった事はバイト配列を渡すことだから、文字列はどうでもいいんだけど(爆)
※コメント投稿者のブログIDはブログ作成者のみに通知されます