- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VCの構造体【否 .Net】)
VCの構造体【否 .Net】
このQ&Aのポイント
- VC++6で作ったDLLをVB6で使おうと画策しています。
- 単純なモノは作れるのですが、構造体の取り扱いがうまくいきません。
- この関数calcをVBで使いたいのですが、どうかお力添えを。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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に変更してください
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.2
VC6など 32Bit系のコンパイラなら int型は4バイトになります 従ってVB6で受けるには長整数のLong型で受けないといけません
質問者
お礼
回答ありがとうございます。 無事、動作しました。
お礼
回答ありがとうございます。 長くなるので書きませんでしたが、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になる?