dllを呼び出す
今作ったfoo.dllをExcelから呼び出してみる
Declare Function foo Lib "D:\dll\foo.dll" (ByVal x As Integer) As Integer Declare Sub bar Lib "D:\dll\foo.dll" (ByVal s As String)
イミディエイトウインドウでテスト
? foo(1) 2 s="Fizz" bar(s) ? s Fizz
残念。ByValでsの先頭ポインタが渡っているはずなのに、なぜかsの中身は書き換わらない。
VBが使用している文字列の「BSTR」は頭に文字の先頭のアドレスがヘッダーとしてくっついています。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200411/04110109.txt
その為にByRefでCのDLLを呼び出すとこの先頭のポインターのポインターが渡ってしまいます。
そこでByValで呼び出しますが、実はこれはが又例外で、ByValで呼び出してもDLLには文字列の先頭
のポインターが渡るのです。