AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit SHGetKnownFolderPath

Ein Thema von Andidreas · begonnen am 22. Nov 2013 · letzter Beitrag vom 25. Nov 2013
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#1

AW: Probleme mit SHGetKnownFolderPath

  Alt 22. Nov 2013, 10:47
Das Gedöns mit der Formklasse erscheint mir etwas merkwürdig. Versuchst Du da Klassen/Objekte zwischen Anwendung und DLL auszutauschen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Probleme mit SHGetKnownFolderPath

  Alt 22. Nov 2013, 10:56
Nein...
Eigentlich werden nur die Connections zu den DBs übergeben?!
Oder welche Stelle meinst Du?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit SHGetKnownFolderPath

  Alt 22. Nov 2013, 11:11
Das hier meine ich:
Zitat:
Delphi-Quellcode:
//Load DLL Form
  lMyFormClass := GetProcAddress(hDLL, 'fnForm');
  If @lMyFormClass <> Nil Then
  Begin
    frmLoadedForm := lMyFormClass.Create(nil);
    frmLoadedForm.Position := poScreenCenter;
    frmLoadedForm.ShowModal;
  End Else
  Begin
    fnDisplayMyActionBox('ERR', 'System Error', 'prOfflineModuleLoad_Single', 'Could not load Module:', sDLLModulePath, EmptyStr, True);
  End;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Probleme mit SHGetKnownFolderPath

  Alt 22. Nov 2013, 11:18
Das ist ja nur dazu da um die Form anzuzeigen...
Wir haben hier zwei Varianten... entweder wird die Form als eigenständiges Fenster angezeigt oder in einem Bereich der Hauptform...


Was ich kurios finde...
Die Funktion die ich oben beschrieben habe, habe ich auch für Windows XP:

Delphi-Quellcode:
//******************************************************************************
// fnGetShellFolder --> Get Constant Special Item ID Path from Windows *
// *
// Only for WIN XP *
// WIN7 has to use fnGetKnownFolderPath in this Unit *
// *
// Parameter --> iCSIDL (Constant Special Item ID) *
// Return --> Boolean True/False *
//******************************************************************************

function fnGetShellFolder(iCSIDL: integer): string;

var
pIDL : PItemIdList;
sFolderPath : string;
iSystemFolder : Integer;
Malloc : IMalloc;
  
begin

  Malloc := nil;
  sFolderPath := '';
  SHGetMalloc(Malloc);

  If Malloc = nil Then
  Begin
    Result := sFolderPath;
    Exit;
  End;

  Try
    iSystemFolder := iCSIDL;
    If SUCCEEDED(SHGetSpecialFolderLocation(0, iSystemFolder, pIDL)) then
    Begin
      SetLength(sFolderPath, max_path);
      If SHGetPathFromIDList(pidl, PChar(sFolderPath)) Then
      Begin
        SetLength(sFolderPath, length(PChar(sFolderPath)));
      End;
    End;
    Result := sFolderPath;
  Finally
    Malloc.Free(pIDL);
  End;

end;
Ich hab die gleiche DLL jetzt unter Windows XP getestet... hier kommt kein Fehler! Also kein Runtime Error...

Liegt der Fehler dann nicht eher in der Funktion für Windows 7, das diese einen Speicherfehler verursacht?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Probleme mit SHGetKnownFolderPath

  Alt 25. Nov 2013, 09:26
Liegt der Fehler dann nicht eher in der Funktion für Windows 7, das diese einen Speicherfehler verursacht?
Weiß jetzt nicht, ob es dein Problem beseitigt, aber es wäre schon gut CoTaskMemFree(sPath) in deiner Funktion zu ergänzen (siehe MSDN).
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Probleme mit SHGetKnownFolderPath

  Alt 25. Nov 2013, 09:59
In der DLL habe ich jetzt mal meine Funktion die unter Windows 7 die Pfade ermitteln soll, gegen den folgenden Code ausgetauscht:

Delphi-Quellcode:
  SHGetKnownFolderPath(FOLDERID_ProgramData, 0, 0, sPath);
  ShowMessage(sPath);
  CoTaskMemFree(sPath);
Mein Runtime Error kommt immer noch...
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?!
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Probleme mit SHGetKnownFolderPath

  Alt 25. Nov 2013, 10:45
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (25. Nov 2013 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Probleme mit SHGetKnownFolderPath

  Alt 25. Nov 2013, 13:50
@Sir Rufo...

Hab deinen Source in meiner DLL getestet, ich bekommen weiterhin den Runtime Error...

Liegt es evtl. wirklich an DeddyH's Vermutung?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 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