tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル-128 +127の定義
記事No14574
投稿日: 2010/03/25(Thu) 12:06
投稿者クン
■VB 6.0
構造体の一部にCのchar型を定義したいのですが、
BYTE型は0〜127しか出来ません。

Public Type ENE_SHM_CMP_INFO
    failCount As Integer                    '連続計測失敗カウンタ
    frzState(1 To 4) As Byte                '冷凍機稼動停止状態
End Type

frzStateには、-1, 0, 1 で意味を持たせたいのです。

何卒、宜しくお願い致します。

[ツリー表示へ]
タイトルRe: -128 +127の定義
記事No14575
投稿日: 2010/03/25(Thu) 12:54
投稿者魔界の仮面弁士
VB6 のユーザー定義型を、C の構造体に合致させたいのであれば、
 「各メンバーの型のサイズ」(符号の有無は無視してよい)
 「各メンバーがポインタか否か」
 「構造体のパッキングサイズ」(VB6 では 32bit境界に配置される)
 「文字列のエンコード」(String を使うか否かを考慮しなければならない)
などを重視してください。

それ以外の部分(値の範囲やパディング位置など)は、呼び出し側で調整する事になります。


> 構造体の一部にCのchar型を定義したいのですが、
C の char 型が -128〜127 か 0〜255 かは処理系依存です。
それどころか、char型が8bitだとも限りません(大抵は、1バイト=8bitですが)。

> BYTE型は0〜127しか出来ません。
VB の BYTE型(正確には Byte型)は、0〜255 の範囲の値をとります。
一方、C 言語に BYTE 型は無いはずです。typedef や #define 等で定義されない限りは。

> Public Type ENE_SHM_CMP_INFO
C 側の定義は、どうなっているのでしょうか?

>     failCount As Integer                    '連続計測失敗カウンタ
C 側における failCount の型は何でしょうか?

>     frzState(1 To 4) As Byte                '冷凍機稼動停止状態
> frzStateには、-1, 0, 1 で意味を持たせたいのです。
C 側の frzState が 8bit符号付き整数型で、かつ、その取りうる値が「-1」「0」「+1」の
3 値のみということであれば、以下のように読み替えれば OK です。
あとは VB 側で Byte 型の定数(Const)を、それぞれの値ごとに用意すれば事足りるかと。

 C側    VB/Byte
 ---    -------
 -1     &HFF
  0     &H00
 +0     &H01

[ツリー表示へ]