Autor Beitrag
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Di 17.01.12 19:03 
MoinMoin,

ich habe ein dickes Problem. Ich wollte die Funktion SHGetFolderPath ersetzen durch die aktuellere SHGetKnownFolderPath. (Nur, falls jemand bemerken sollte, "Warum, wenn es mit der alten ging?": Weil die einige Folder aus Vista und Win7 nicht kennt, die CSIDLs sind ja begrenzt.)

Ich habe also folgenden Quelltext:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
interface
   :
   : 
function SHGetKnownFolderPath(rfid: TGUID; dwFlags: DWORD; hToken: THandle; var ppszPath: IntPtr): HRESULT;
function SHGetKnownFolderPathA(rfid: TGUID; dwFlags: DWORD; hToken: THandle; var ppszPath: IntPtr): HRESULT;
function SHGetKnownFolderPathW(rfid: TGUID; dwFlags: DWORD; hToken: THandle; var ppszPath: IntPtr): HRESULT;
   :
   :
implementation
   :
   :
const
  Shell32Dll = 'Shell32.dll';

[SuppressUnmanagedCodeSecurity, DllImport(Shell32Dll, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'SHGetKnownFolderPath')]
function SHGetKnownFolderPath; external;
[SuppressUnmanagedCodeSecurity, DllImport(Shell32Dll, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SHGetKnownFolderPathA')]
function SHGetKnownFolderPathA; external;
[SuppressUnmanagedCodeSecurity, DllImport(Shell32Dll, CharSet = CharSet.Unicode, SetLastError = True, EntryPoint = 'SHGetKnownFolderPathW')]
function SHGetKnownFolderPathW; external;
     :
     :
function GetFolderPath(Folder: TGUID): String;
  var
    Buffer: IntPtr;
    Res: HRESULT;
begin
  Res := SHGetKnownFolderPath(Folder, 00, Buffer);
  OleCheck(Res);
  Result := Marshal.PtrToStringAuto(Buffer);
  if Assigned(Buffer) then
    CoTaskMemFree(Buffer);
end;

Wenn ich nun dier Funktion die GUID FOLDERID_Documents übergebe, erhalte ich in der Zeile "Res := ..." folgende Exception:
"Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist."

Weiß jemand Rat? Was mache ich falsch?
Bin für jeden Hinweis dankbar.

Gruß ASMFreak

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!