SHGetKnownFolderPath aus Delphi Net
spacer
Autor Nachricht
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
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 markieren
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, 0, 0, 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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
home home