Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#14

AW: Hilfe Virusmeldung bei Delphi XE Trial

  Alt 1. Mär 2011, 15:55
szFileN > kein Speicher reserviert
nMaxFile := SizeOf(szFileN); > szFileN ist ein Pointer, also stimmt die Länge nicht, abgrsehn davon daß nMaxFile in Chars und nicht in Bytes angegeben werden muß.

Warum müssen denn ständig welche Ansi, Unicode und Dynamisch vermischen?

PAnsiChar/AnsiString/TOpenFileNameA
oder
PWideChar/WideString/UnicodeString/TOpenFileNameW
oder
PChar/String/TOpenFileName

Delphi-Quellcode:
function OpenSaveFileDialog(ParentHandle: THandle; fFlags: Integer; const DefExt, Filter, InitialDir,
                            Title: string; var FileName: string;
                            out ReadOnly: Boolean; IsOpenDialog: Boolean): Boolean; overload;
var
  ofn: TOpenFileName;
  szFileN: array[1..MAX_PATH] of Char;
begin
  //Move(szFileN, PChar(FileName)^, (Length(FileName) + 1) * SizeOf(Char));
  FillChar(szFileN, SizeOf(szFileN), 0);
  FillChar(ofn, SizeOf(ofn), 0);
  with ofn do
  begin
    lStructSize := SizeOf(ofn);
    hwndOwner := ParentHandle;
    lpstrFile := @szFileN;
    nMaxFile := Length(szFileN);
    if Title <> 'then
      lpstrTitle := PChar(Title);
    flags := fFlags;
    if InitialDir <> 'then
      lpstrInitialDir := PChar(InitialDir);
    lpstrFilter := PChar(CharReplace(Filter, '|', #0) + #0#0);
    if DefExt <> 'then
      lpstrDefExt := PChar(DefExt);
    lpfnHook := nil;
  end;
  //if IsOpenDialog then
  //begin
  // if GetOpenFileName(ofn) then
  // begin
  // Result := True;
  // ReadOnly := ofn.Flags and OFN_READONLY = OFN_READONLY;
  // FileName := szFileN;
  // end;
  //end
  //else
  //begin
  // if GetSaveFileName(ofn) then
  // begin
  // Result := True;
  // FileName := szFileN;
  // end;
  //end;
  Result := (IsOpenDialog and GetOpenFileName(ofn))
     or (not IsOpenDialog and GetSaveFileName(ofn));
  if Result then
  begin
    ReadOnly := ofn.Flags and OFN_READONLY = OFN_READONLY;
    FileName := szFileN;
  end;
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Mär 2011 um 15:57 Uhr)
  Mit Zitat antworten Zitat