掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WriteFileの引数const Bufferとは何ですか? (ID:18782)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
にしのさん、りおりおさん早速のアドバイスありがとうございます。 とてもわかりやすい説明でした。 まとめてみました。すると新たな疑問が浮上してしまいました・・・ 【string型について】 ・string型(長い文字列)変数(4byte)には文字列へのポインタが格納されている。 (デバッグインスペクタで見える変数のところ) ・文字列へのポインタが指し示すアドレス-4byteの位置に文字列長が格納されている。 (-8byteのところが参照カウンタ???) なのでstring型変数をそのままPChar型にキャストするということは、 もともとその変数には文字列へのポインタが入っているので、 string型だからポインタをずらす等の特別なことはやっていない(本当に単なるキャスト)。 【'1234'と言う記述について】 わたくしの質問で'1234'という記述は0x31,0x32,0x33,0x34が格納されている バッファへのポインタではないかと申しましたが、 正解は文字列の実体そのものをあらわすのですね。 C言語だと"abc"でabcが格納されているバッファへのポインタなので混乱しました。 【新たな疑問】 りおりおさんと同じ疑問が浮上しました。 > ただ、文字列のリテラルがどうしてうまくいくのか、よく分かりません。 これです。 例えばにしのさんのコードでは > strValu:String; > strValue := 'abcde'; > //こっちでも可能 > //WriteFile(hFile, strValue[1], intLen, dwDummy, nil); でも大丈夫とありましたが、strValue[1]は'a'の実体、つまり0x61が 引数として渡されるだけではないのでしょうか? つまり WriteFile(hFile,'a',5,dwDummy,nil); と同じに思えてしまいます。 strValue[1]と指定しても、'abcde'と指定できるのが不思議です。 >function Test(const Buffer): DWORD; stdcall; >とあると、Bufferは、ポインタとしてスタックにPUSHされます。 この辺りもう少し教えていただけますでしょうか? やはり引数のconst Bufferはポインタを指定する?という 始めの疑問に戻ってきてしまいました。 宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.