• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6からDLLへの構造体受け渡し)

VB6からDLLへの構造体受け渡し

このQ&Aのポイント
  • VB6からCで作成したDLLに構造体を受け渡す方法について解説します。
  • 構造体にはLong型やDouble型、他の構造体も含まれており、C側も同様に設定する必要があります。
  • 構造体の一部の変数が文字化けしてしまう問題が発生することがあります。

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

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

Cの構造体の場合アクセスするメモリーアドレスの効率化のため要素の配置する場所が連続メモリー領域で無い場合があります 今回の場合一番大きな要素は doubleまたはCvPointで8バイト占有します この8バイトに各要素の境界をそろえるように配置されます したがって intの要素5個の後ろに使用しない4バイトがありその後ろにdoubleの3要素、CvPoint続くことになります 一方 VBのほうはそのようなことはお構いなしに構造体要素をそのまま並べます ここで4倍との差が生じ結果として doubleやCvPointがおかしくなるわけです 回避方法ですが 1) C側で構造体宣言部分に『#pragma pack(1)』などを指定しておく 2) intとdoubleの境界にダミーのint型のメンバーを置く 3) intメンバーを構造体の一番最後で宣言する などが考えられます また pragma packを使う際には #pragma pack( push, myHeader ) #include "myHeader.h" #pragma pack( pop, myHeader ) などとして構造体宣言したヘッダーファイルをはさむようにすると パッキング指定の互換性が保たれます この辺りは お使いのCコンパイラのマニュアルで確認しましょう

sadapapa
質問者

お礼

お返事ありがとうございます。 VB側で余計な事をして上手く受け渡しが出来なくなる事があるようですね!ご回答頂いた事を試してみたいと思います。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A