![]() |
AW: Probleme mit SHGetKnownFolderPath
Zitat:
Delphi-Quellcode:
in deiner Funktion zu ergänzen (siehe MSDN).
CoTaskMemFree(sPath)
|
AW: Probleme mit SHGetKnownFolderPath
In der DLL habe ich jetzt mal meine Funktion die unter Windows 7 die Pfade ermitteln soll, gegen den folgenden Code ausgetauscht:
Delphi-Quellcode:
Mein Runtime Error kommt immer noch...
SHGetKnownFolderPath(FOLDERID_ProgramData, 0, 0, sPath);
ShowMessage(sPath); CoTaskMemFree(sPath); Kann das evtl. auch an der ShlObj Unit liegen? Als letzte Idee würde mir noch einfallen das ganze gegen die Funktion GetEnvironmentVariable auszutauschen... Was ich nicht unbedingt möchte... @DeddyH Ich hoffe ich konnte in meinem letzten Beitrag deine Fragen nach dem Austausch von Objekten und Klassen zwischen Forms und DLLs beantworten?! |
AW: Probleme mit SHGetKnownFolderPath
Also hiermit habe ich keine Probleme
Delphi-Quellcode:
library PathLib;
uses Winapi.ActiveX, Winapi.ShellAPI, Winapi.ShlObj, Winapi.Windows, System.SysUtils, System.Classes; {$R *.res} function GetKnownFolderPath( ACSIDL : TGUID ) : WideString; var LPath : PWideChar; begin if SHGetKnownFolderPath( ACSIDL, 0, 0, LPath ) = S_OK then Result := LPath else Result := ''; end; function GetSpecialFolder( AFolderID : Integer ) : WideString; var LPath : PWideChar; begin GetMem( LPath, MAX_PATH * SizeOf( WideChar ) ); try if SHGetSpecialFolderPathW( 0, LPath, AFolderID, False ) then Result := LPath else Result := ''; finally FreeMem( LPath ); end; end; function DocumentRoot : WideString; stdcall; begin if CheckWin32Version( 9 ) then Result := GetKnownFolderPath( StringToGUID( '{FDD39AD0-238F-46AF-ADB4-6C85480369C7}' ) ) else Result := GetSpecialFolder( CSIDL_MYDOCUMENTS ); end; exports DocumentRoot; begin end.
Delphi-Quellcode:
unit View.Main;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TMainView = class( TForm ) Button1 : TButton; procedure Button1Click( Sender : TObject ); private { Private-Deklarationen } public { Public-Deklarationen } end; var MainView : TMainView; implementation {$R *.dfm} function DocumentRoot : WideString; stdcall; external 'PathLib.dll'; procedure TMainView.Button1Click( Sender : TObject ); begin Caption := DocumentRoot; end; end. |
AW: Probleme mit SHGetKnownFolderPath
@Sir Rufo...
Hab deinen Source in meiner DLL getestet, ich bekommen weiterhin den Runtime Error... :cry: Liegt es evtl. wirklich an DeddyH's Vermutung? |
AW: Probleme mit SHGetKnownFolderPath
Zitat:
|
AW: Probleme mit SHGetKnownFolderPath
SHGetKnownFolderPath ist in ShlObj, aber funktioniert erst ab VISTA.
@Andidreas: Du hast zwar "WINDOWS 7" geschrieben, aber bist Du versehentlich auf einem anderen BS? |
AW: Probleme mit SHGetKnownFolderPath
Zitat:
Unter Windows XP war die Welt noch in Ordnung (darum hat er es mit SHGetKnownFolderPath für Windows 7 versucht) ;) |
AW: Probleme mit SHGetKnownFolderPath
Fehlt vielleicht ein CoInitialize/Ex?
Was sagt GetLastError? Runtime Error direkt aus der API Funktion hört sich seltsam an. |
AW: Probleme mit SHGetKnownFolderPath
1. Nur mal eine Idee: Benutzt Du vielleicht in Deiner DLL einen anderen oder auch speziellen Speichermanager als in der Exe?
2. Testhalber würde ich mal folgendes in der DLL ändern:
Delphi-Quellcode:
function fnGetKnownFolderPath(sKnownFolderID : String) : String;
var sPath: String; begin SetLength(SPath, MAX_PATH); {$IFDEF VER220} If sKnownFolderID = 'FOLDERID_Desktop' Then SHGetKnownFolderPath(FOLDERID_Desktop,0, 0, PWideChar(sPath)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz