HOME >> 書籍・人物 >> 山崎はるかのメモ

VB.NET/VB6.0/CLR/C/C++/Win32API 型一覧表

- データ型名・型変換・対照表 -

△メモエリアにもどる

Hatena bookmark Yahoo! bookmark


型名 ビット幅 バイト長 VB.NET VB6.0 CLR仕様 末尾文字 C/C++/Win32型 値範囲
符号付バイト型 8 1 SByte (Byte) SByte   char,CHAR,TCHAR -128 〜127
バイト型 8 1 Byte Byte Byte   unsigned char,BYTE 0〜255
文字型 16 2 Char   Char C WCHAR 0〜65535
短整数型 16 2 Short Integer Int16 S short , SHORT , ATOM -32,768 〜 32,767
短整数型(符号なし) 16 2 UShort

※1

UInt16 US unsigned short, WORD , LANGID 0 〜 65,535
整数型 32 4 Integer Long Int32 Iまたは% int※2 , long , INT , LONG , LCID -2,147,483,648 〜 2,147,483,647
整数型(符号なし) 32 4 UInteger

※1

UInt32 UI unsigned long , UNIT , DWORD , ULONG 0 〜 4,294,967,295
単精度浮動小数点型 32 4 Single Single Single Fまたは! float 〔負〕 -3.402823E38 〜 -1.401298E-45
〔正〕 1.401298E-45 〜 3.402823E38
長整数型 64 8 Long   Int64 Lまたは& LONGLONG -9,223,372,036,854,775,808〜 9,223,372,036,854,775,807
長整数型(符号なし) 64 8 ULong   UInt64 UL ULONGLONG 0 〜 18,446,744,073,709,551,615
倍精度浮動小数点型 64 8 Double Double Double Rまたは# double 〔負〕 -1.79769313486231570E+308 〜 -4.94065645841246544E-324
〔正〕4.94065645841246544E-324 〜 1.79769313486231570E+308
通貨型 64 8 (Double) Currency (Double)     -922,337,203,685,477.5808 〜 922,337,203,685,477.5807
日付型 64 8 Date Date DateTime     0001/01/01 00:00:00 〜  9999/12/31 23:59:59
10進数型 112 14   Decimal       ※10進数型・VB6.0では直接 型宣言はできず Variantの内部型となる
Dim a As Variant
a = CDec(1E-28)  などとして用いると Variant/Decimal 型となる
10進数型 128 16 Decimal   Decimal Dまたは@   (小数点なし) 0 〜 +/-79,228,162,514,264,337,593,543,950,335
(小数点以下 28 桁)  0 〜 +/-7.9228162514264337593543950335
(0 以外の絶対小数) +/-0.0000000000000000000000000001 (+/-1E-28)
論理型 ※3 8・16・32 1・2・4 Boolean Boolean Boolean   BOOLEAN(TRUE=1.FALSE=0) 1byte
BOOL(TRUE=1.FALSE=0) 4byte
Trueは 0以外(VBでは-1)となる , False=0
文字列型 可変長 10+文字列長 String String String     VB6.0では0 〜 2GB
VB._NETでは 0〜20億個のUnicode文字
文字列型(固定長) 固定長 固定長 String String String      
オブジェクト型 32bit環境 32 4 Object Object Object     オブジェクトを参照するデータ型・任意の型
オブジェクト型 64bit環境 64 8 Object   Object     オブジェクトを参照するデータ型・任意の型
バリアント型(数値) 128 16 (Object) Variant (Object)     Double型に同じ
バリアント型 176+X 22+文字長 (Object) Variant (Object)     可変長文字列型に同じ

〔注釈〕
・VB.NET/VB6.0/CLR 内に表記の (かっこ) は、代替案です。

※1 VB6.0で Win32のWORDを受ける場合は Integer、 また UINT , DWORD は、 Long 型で受けるのが一般的です。
ただしいずれも Win32の符号なし値を、VB6.0の「符号付き」で受けることになるので、受け取り後に 正反転処理が必要です。
具体的には 受け取った値が マイナス(負)になっている場合。
unsigned short (WORD) の場合は、VB6.0 Integer で受け取り後、それに 2 ^ 16 を加算して、その値を VB6.0 Long で受ける。
あるいは unsigned long (DWORD)の場合は、VB6.0 Long で受け取り後、2 ^ 32 を加算して、VB6.0 Double で受ける、などとして、正の値にします。

※2 C/C++ の int型は 環境(プラットフォーム)にビット幅が依存します。なお Win32の INT は「32」という文字通り、32bit幅です。

※3 論理型のサイズは、環境(プラットフォーム)に依存します。
これが問題になるのは、Win32のBOOL型・BOOLEAN型を、VB.NET/VB6.0/CLRで受ける場合です。
BOOLEAN型 は、符号付バイト型(1バイト)で受けます。
BOOL型は、整数型・すなわち VB.NET/CLR Integer型、VB6.0 Long 型で受けるのが一般的です。
 いずれの場合も、直接 Boolean 型で受けるのは避けるべきです。Win32とVB.NET/VB6.0/CLRの 論理型の共通点は「Falseが0」という点のみです。
したがって、実際にコーディングを行う場合も、「False (0) か、そうでないか」を判断することが一般的となり、True を判断に用いるのは 不安要素となります。


この表について - 意外に型対照表って ないよね

翔泳社さんの「Windows Developer Magazine」に連載していた頃のこと。
連載が はじまった当時は .NET Framework 1.x の頃で、一般には VB6.0 のユーザーさんも多く、解説のために、VB.NET ←→VB6.0 とか、Win32API←→VB.NET の型変換を 同一誌面上で行うことがありました。
が、これ たいへん複雑ですので、書いてるほうも 時に、ワケが分からなくなることがよくありました。

この表は、その対策として 自分用に作ったものです。
連載は通信関係が主体でしたので、主に、型の差異や、取り扱いの微妙な違い、特に Win32 API とのやりとりの解説が、重要な課題でしたので、表もそのようなレイアウトになっています。

-

お気づきの点がありましたら、ご意見・ご感想 まで。

(2008/5/17・山崎はるか)


■メモエリアに戻る