3

FILE_BOTH_DIR_INFORMATION構造体のShortNameLengthメンバーは、次のように宣言されます。

typedef struct FILE_BOTH_DIR_INFORMATION {
  ...
  CCHAR  ShortNameLength;
  ...
};

タイプの説明CCHARから、CCHAR8ビットWindows(ANSI)文字です。AnsiCharだから、それはデルファイと同等ですよね?ただし、構造体のShortNameLengthメンバーの説明には、次のように書かれています。FILE_BOTH_DIR_INFORMATION

ShortNameLength短いファイル名文字列の長さをバイト単位で指定します。」

CCHARこのステートメントは、同等のものがByteDelphiにあると私に思わせます。別の例は、そのNumberOfProcessorsメンバーが次のようSYSTEM_BASIC_INFORMATIONに宣言されているものです。winternl.h

typedef struct _SYSTEM_BASIC_INFORMATION {
  BYTE Reserved1[24];
  PVOID Reserved2[4];
  CCHAR NumberOfProcessors;
}

繰り返しになりますが、CCHARタイプはByteコンテキストではなくコンテキストで使用されているAnsiCharようです。

さて、 Delphiで使用するか、同等AnsiCharのものByteとして使用するかどうか、私は混乱します。CCHAR

ノート

JwaWinType.pasJEDIのWindowsAPIはとして宣言CCHARAnsiCharます。

4

2 に答える 2

5

これは1バイトであるか、少なくとも1バイトの整数として使用されます。Cでは、charをこの目的に使用できます。Delphiでは、型キャストなしではそれを行うことはできませんでした。したがって、を使用することもできますCharが、その場合は、値を指定する'A'Chr(65)、65文字の文字列を指定する必要があります。さて、それはばかげているでしょう。:-)

APIに渡すことができるようにするには、同じサイズである必要があります。それとは別に、呼び出し先はそれがどのように宣言されているかさえ知らないので、Delphiバイトとして宣言することが最も論理的な解決策です。あなたが見つけた他の宣言によって裏付けられた選択。

于 2012-11-10T14:39:26.620 に答える
4

の説明CCHARが間違っていると思います。Cプレフィックスは、これが文字数あることを示しているため、説明を書くときにMicrosoftが行った単純なコピーアンドペーストエラーである可能性があります。

これはバイトに格納され、文字列のバイト数をカウントするために使用されます。これらの文字はワイド文字である可能性がありますが、CCHAR値は文字を格納するために使用されるバイト数をカウントします。

このタイプの自然な翻訳はですByte。のように文字タイプにマーシャリングする場合はAnsiChar、使用する前に文字を整数値(バイトなど)に変換する必要があります。

于 2012-11-10T14:40:54.653 に答える