喫茶XRAYトップページ

[スレッド全体
]

[4727] XEのバグでしょうか?返信 削除
2011/5/10 (火) 09:07:48 pal
久しぶりの投稿です。
FindFirstで悩んでいます。
OS:WIN7

テンポラリフォルダのファイルリストを取得するものですが
1.Delphi7=>正常動作
2.Delphi2010=>正常動作
3.DelphiXE=>
---------------------------
モジュール 'TEST.exe' のアドレス 004B3ED0 で
アドレス 00000394 に対する読み取り違反がおきました。
---------------------------
こうなります。

XEのバグでしょうか?
ご教授ください。

procedure TForm1.Button1Click(Sender: TObject);
var
    i: Integer;
    StrTempPath: Array[0..MAX_PATH] of Char;
    SearchRec: TSearchRec;
    ST: TStringList;
begin
    GetTempPath(SizeOf(StrTempPath),StrTempPath);
    ST := TStringList.Create;
    try
        i := FindFirst(StrTempPath+'*.LOG',faAnyFile,SearchRec);
        while i = 0 do begin
            ST.Add(SearchRec.Name);
            i := FindNext(SearchRec);
        end;
        SysUtils.FindClose(SearchRec);
        Memo1.Lines.Assign(ST);
    finally
        ST.Free;
    end;
end;


[4729] Re:XEのバグでしょうか?・・PS返信 削除
2011/5/10 (火) 11:22:50 Syake
▼ palさん
追記:
AddObjectsは2009とXEでは処理方法が異なるようです。
2010とXEはどうなのでしょうか?

[4730] Re2:XEのバグでしょうか?・・PS返信 削除
2011/5/10 (火) 14:08:07 pal
▼ Syakeさん
> ▼ palさん
> 追記:
> AddObjectsは2009とXEでは処理方法が異なるようです。
> 2010とXEはどうなのでしょうか?

ありがとうございます。
すみません、私には処理方法の違いを調べる力量がありません。

ちなみに下記のように変更するとうまくいきます。
//    GetTempPath(SizeOf(StrTempPath),StrTempPath);//------>Error
StrTempPath:='C:\Windows\';//---->OK

従って、GetTempPath関数の使い方がおかしいのでしょうか?


[4732] Re3:XEのバグでしょうか?・・PS返信 削除
2011/5/10 (火) 15:03:14 DEKO 〔HomePage
SizeOf() はバイト数を返します。

StrTempPath: Array[0..MAX_PATH] of Char;

StrTempPath: Array[0..MAX_PATH] of AnsiChar; <- ANSI 版 Delphi
StrTempPath: Array[0..MAX_PATH] of WideChar; <- Unicode 版 Delphi

ですので、Unicode 版 Delphi で SizeOf(StrTempPath) を実行すると
522 ("(260 + 1) * 2") が返ってきます。

一方、GetTempPath() の引数は "TCHAR 単位" です。
TCHAR というのは...

ANSI の時    → 1 エレメント = バイト
Unicode の時 → 1 エレメント = ワード

ですので、正しくは

GetTempPath(Length(StrTempPath), StrTempPath)

となります (ANSI でも Unicode でも)。

[SizeOf の呼び出し (DocWiki)]
http://docwiki.embarcadero.com/RADStudio/XE/ja/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92_Unicode_%E5%AF%BE%E5%BF%9C%E3%81%AB%E3%81%99%E3%82%8B#SizeOf_.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.97

[4733] Re4:XEのバグでしょうか?・・PS返信 削除
2011/5/10 (火) 15:06:26 Mr.XRAY
わっ,DEKOさんとダブった.1秒違い
私の場合にエラー発生がないのは,文字数の違い等,たまたまでしょうね.
では,参考リンク

sizeof
http://docwiki.embarcadero.com/RADStudio/ja/Sizeof

[4734] Re5:XEのバグでしょうか?・・PS返信 削除
2011/5/10 (火) 15:11:28 Mr.XRAY
あっ,DEKOさんのリンクのほうがいい!
残念... ちょっと悔しい...


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82