• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VCの構造体【否 .Net】)

VCの構造体【否 .Net】

このQ&Aのポイント
  • VC++6で作ったDLLをVB6で使おうと画策しています。
  • 単純なモノは作れるのですが、構造体の取り扱いがうまくいきません。
  • この関数calcをVBで使いたいのですが、どうかお力添えを。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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に変更してください

Trick--o--
質問者

お礼

回答ありがとうございます。 長くなるので書きませんでしたが、extern"C"ではなくdefファイルで出しています。 参考にさせていただきます。

Trick--o--
質問者

補足

VB側のコーディングは Private Type Data_t  a as Long  b as Long  c as Long End Type --- VCのintがVBのLongになる、と考えてよろしいのでしょうか? ということは、戻り値などでintを使うときもVB側ではLongになる?

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VC6など 32Bit系のコンパイラなら int型は4バイトになります 従ってVB6で受けるには長整数のLong型で受けないといけません

Trick--o--
質問者

お礼

回答ありがとうございます。 無事、動作しました。

関連するQ&A