「一気に最後まで読んだ」本、教えて下さい!

No.280310の質問の続きになってしまいますが
「VCで作ったdllを使用し VBに文字列を返すことはできますか」
でVCで作ったdllをVBを呼び出す事ができるようになりました。

Declare宣言で疑問に思ったのですが
Declare Function TxtCnt Lib "hoge.dll" (ByVal a As String) As Long

aはなぜ値渡しなのでしょうか?
変数が書き換えられて戻ってくるので、byrefで指定していました。
それが問題が起こしていた原因一つでした。
ちなみにint型の数値をポインタで渡した場合はbyrefでうまくいきます。
ご教授願います。

A 回答 (1件)

VBのString型は


┌─────┬───────────┐
│文字列長さ│文字列データ・・・・・│
└─────┴───────────┘
という形式でメモリ上に確保されます。
つまり先頭2バイトにデータ長、その後に本当のデータが入っています。

Declare宣言でByRefにするとString型の先頭アドレス(文字列長さのアドレス)が渡されます。
一方、ByValにするとString型のデータ部分(文字列データのアドレス)が渡されます。
    • good
    • 0
この回答へのお礼

勉強になりました。ありがとうございました。

お礼日時:2002/05/29 07:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!