基本的な質問なのか、ばかげた質問なのか、お詫び申し上げます。違いは何ですか char*
およびLPSTR
。ここで、sizeof
は両方とも私のコンパイラで4バイトを与えます。誰かが私を詳しく説明できますか?ありがとう..
LPSTR
はWindowsタイプであり、コンパイルしているプラットフォームに関係なく同じであることを意味します。文字列への長いポインタです。
セグメント化されたアーキテクチャ(新しいセレクタベースのセグメント化されたメモリではなく、古い64Kセグメント)の時代には、小、小、中、大、大のメモリモデルがあり、Windowsの種類が常に同じであることが重要でした。ポインタの種類に関係なくchar *
。
したがって、基になる型が異なるさまざまなコンパイラに準拠した場合、windows.h
ヘッダーファイルはそれを補うためにLPSTR
を定義します。
たとえば、BorlandCには16ビットのchar *
があり、LPSTR
はfar char *
として定義する必要があった可能性があります。 char *
がすでにlong/farポインターであったコンパイラーでは、LPSTR
は代わりにそれを使用していました。
今日では、32ビット以上のフラットモデルでは、おそらくそのようなシェナニガンは実際には必要ありませんが、64ビット間のサンクなどで可能性がありますおよび32ビットコード。それでも、そこで定義されたタイプはまだ私たちと一緒にあり、まだ非常に使用されています。
基本的に、LP *ポインターは、16ビットバージョンのWindowsで32ビットポインターを使用することを示していました。
から ウィキブックス
文字「LP」または接頭辞「lp」は「ロングポインタ」を表し、32ビットマシンの通常のポインタとまったく同じです。 LPデータオブジェクトは、ポインタと長いポインタを区別する必要があるときにWindows3.1以降から引き継がれた単なるレガシーオブジェクトです。最新の32ビットシステムでは、これらのプレフィックスは同じ意味で使用できます。
違いは時間の深さに埋もれています。 LPSTRは、「文字列への長いポインタ」の略です。 32ビットプロセッサの前に戻ると、メモリの別のセグメントにある可能性のあるメモリへのポインタ(メモリ内で遠く離れていると考えてください)には、格納するための追加のスペースが必要でした。
32ビット(およびそれ以降)のプロセッサでは、まったく同じものです。マイクロソフトは、歴史的な理由でのみLPSTRを使用しています。