【VC6で作成されているDLLをVB6で呼び出したい!】VC6で作成されているDLLには

メソッドの引数としてBYTE* ,int*型が存在するのですが、VBで呼び出す場合はどうしたら良いでしょうか。
(DLLを用いるラッパーのDLLを用意してポインタ表現とかを排除した方が良いのでしょうか?)
ご助言宜しくお願いします

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/03/01 15:15:16
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mj99 No.2

回答回数138ベストアンサー獲得回数38

ポイント400pt

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

の範囲で実体を読み書きできます。

(範囲外にアクセスした場合の動作は予期できない。案外なにも起こらない)

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント60pt

http://questionbox.jp.msn.com/qa1186875.html

1バイトの文字を 文字コードで渡せば OKらしいです。

id:harunoharuno

回答ありがとうございます。

2010/03/01 15:14:23
id:mj99 No.2

回答回数138ベストアンサー獲得回数38ここでベストアンサー

ポイント400pt

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

の範囲で実体を読み書きできます。

(範囲外にアクセスした場合の動作は予期できない。案外なにも起こらない)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません