VC++6で作ったDLLをVB6で使おうと画策しています。
単純なモノは作れるのですが、構造体の取り扱いがうまくいきません。
DLLの内容(抜粋)
typedef struct {
int a;
int b;
int c;
} Data_t;
Data_t __stdcall calc(int a, int b)
{
Data_t tData;
tData.a = a + b;
tData.b = a - b;
tData.c = a * b;
return tData;
}
この関数calcをVBで使いたいのですが……
どうかお力添えを。
DLLを作る際に C++修飾を抑制するためにエクスポートする部分を
extern "C" {
// 実際のコーディング
}
で囲っておいたほうがいいでしょう
VB側のコーディングは
Private Type Data_t
a as Long
b as Long
c as Long
End Type
Private Function Calc Lib "Calc.dll" Alias "_calc@8" _
(ByVal a as Long, ByVal b as Long) as Data_t
Private Sub Command1_Click()
Dim ansData as Data_t
ansData = Calc( 5, 8 )
debug.print ansData.a, ansData.b, ansData.c
End Sub
といった具合でしょう
標準モジュールに 関数定義や構造体定義を書くのであれば
Privateを Publicに変更してください
お礼
回答ありがとうございます。 長くなるので書きませんでしたが、extern"C"ではなくdefファイルで出しています。 参考にさせていただきます。
補足
VB側のコーディングは Private Type Data_t a as Long b as Long c as Long End Type --- VCのintがVBのLongになる、と考えてよろしいのでしょうか? ということは、戻り値などでintを使うときもVB側ではLongになる?