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」は頭に文字の先頭のアドレスがヘッダーとしてくっついています。
その為にByRefでCのDLLを呼び出すとこの先頭のポインターポインターが渡ってしまいます。
そこでByValで呼び出しますが、実はこれはが又例外で、ByValで呼び出してもDLLには文字列の先頭
ポインターが渡るのです。

http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200411/04110109.txt