DLLを作るには?


ALW  URL  2002-06-22 07:32:59  No: 75777

VBで使うDLLをVCで作りました。
VC側で
static keisoku{
   int i;
   float data[37][99];
};
〜funcmeasure(int j,keisoku *mv){
  …
  mv->i = 〜;
  mv->data[0][2] =〜;
  …
}
としました。

VBで、アドレスで渡したい時Byrefと書いてあったのでByref mp as keisoku
としました。
Private type keisoku
  i as integer
  data(37,99) as double
end type
です。
VBで、mp.iの値は正常なのですが、配列の方がに値が入ってくれません。
配列にすると動きません。なぜですか?


Say  2002-06-22 20:06:51  No: 75778

参考資料

int  は4バイト
float  は4バイト
data[37][99]は要素が0〜36と0〜98で要素数37×99=3663

integer  は2バイト
double   は8バイト
Option Base = 0 の場合
data(37,99)は要素が0〜37と0〜99で要素数38×100=3800

構造体で受け渡しするのなら、
アラインメントも考慮する必要があります。


YuO  2002-06-22 20:21:45  No: 75779

とりあえず,
Integer@VB <--> short int@VC++
Double@VB <--> double@VC++
だろ,とか
float data[37][99];とdata(37,99) as double
では確保する数が違うし順番も逆だろ,
ということもありますが,
まずは
Microsoft Knowledge Base JP410837
[VB5] Visual Basic 5.0 から呼び出し可能な DLL の作成例
を見てみることをお勧めします。

おそらく,
#pragma pack(4);
struct keisoku {
    short int i;    LPSAFEARRAY data;
};
#pragma pack()
ではないかと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加