質問: 【VC6で作成されているDLLをVB6で呼び出したい!】VC6で作成されているDLLには メソッドの引数として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 の範囲で実体を読み書きできます。 (範囲外にアクセスした場合の動作は予期できない。案外なにも起こらない)