メソッドの引数としてBYTE* ,int*型が存在するのですが、VBで呼び出す場合はどうしたら良いでしょうか。
(DLLを用いるラッパーのDLLを用意してポインタ表現とかを排除した方が良いのでしょうか?)
ご助言宜しくお願いします
hoge.dllに
void foo(byte* b,int* n) {}
があるとして、
VB6でこれを呼ぶ場合は、下記のとおりです。
Private Declare Sub foo Lib "hoge.dll" (ByRef b As Byte, ByRef n As Long) Private Sub test() Dim b(9) As Byte Dim n(99) As Long Call foo(b(0), n(0)) End Sub
関数宣言は、参照渡し(ByRef)で定義しておき、
関数実行時、配列の先頭の変数を渡します。
※VCのintに対応するVB6の型はLongです。VB6のIntegerは2バイト
参照渡しとは 【call by reference】 - 意味/解説/説明/定義 : IT用語辞典
上記の例では、VB6側でb(9)、n(99)で変数を用意しているので、
VC側の関数では、
変数bは、b+0~b+9
変数nは、n+0~n+99
の範囲で実体を読み書きできます。
(範囲外にアクセスした場合の動作は予期できない。案外なにも起こらない)
hoge.dllに
void foo(byte* b,int* n) {}
があるとして、
VB6でこれを呼ぶ場合は、下記のとおりです。
Private Declare Sub foo Lib "hoge.dll" (ByRef b As Byte, ByRef n As Long) Private Sub test() Dim b(9) As Byte Dim n(99) As Long Call foo(b(0), n(0)) End Sub
関数宣言は、参照渡し(ByRef)で定義しておき、
関数実行時、配列の先頭の変数を渡します。
※VCのintに対応するVB6の型はLongです。VB6のIntegerは2バイト
参照渡しとは 【call by reference】 - 意味/解説/説明/定義 : IT用語辞典
上記の例では、VB6側でb(9)、n(99)で変数を用意しているので、
VC側の関数では、
変数bは、b+0~b+9
変数nは、n+0~n+99
の範囲で実体を読み書きできます。
(範囲外にアクセスした場合の動作は予期できない。案外なにも起こらない)
回答ありがとうございます。