| Autor |
Beitrag |
Peter18
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mo 08.02.10 17:01
Ein freundliches Hallo an alle,
ich möchte den Pfad auf eine Datei aus einer ".LNK"-Datei lesen. Dazu möchte ich einen Api-Aufruf verwenden um Fehler zu vermeiden, wenn sich die Dateistruktur ändert. Nach langer Suche habe ich "IShellLink::GetPath Method" gefunden. Da es eine Methode ist funktioniert
Delphi-Quelltext 1: 2: 3: 4:
| function GetPath(pszPath: PChar; cchMaxPath: Longint; pfd: WIN32_FIND_DATA; fFlags: Longint): Integer; external 'shell32.dll'; | nicht. Kann mir jemand einen Tipp geben, was in diesem Fall zu tun ist?
Ach ja, ich verwende Delphi 4.
Freundliche Grüße von der Nordsee!
Zuletzt bearbeitet von Peter18 am Mo 08.02.10 17:25, insgesamt 1-mal bearbeitet
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mo 08.02.10 17:10
Was meinst du mit "Weil es eine Methode ist, funktioniert es nicht"?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 08.02.10 17:19
In der Deklaration fehlt noch mindestens ein stdcall; ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mo 08.02.10 17:23
Hallo platzwart,
es kommt die Fehlermeldung "... wurde nicht gefunden". Ich nehme an, dass geschieht, weil es eine Methode von "IShellLink" ist und ähnlich wie bei Delphi (IShellLink.GetPath) deklariert werden muss. Leider weiß ich nicht wie das syntaktisch in Pascal aussehen muss und habe noch keine Hinweise gefunden.
Freundliche Grüße von der Nordsee!
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mo 08.02.10 17:29
Hallo BenBE,
danke für den Hinweis, hatte ich übersehen, aber funktioniert auch damit nicht.
Grüße von der Nordsee
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 08.02.10 17:44
IShellLink ist ein Interface. Das musst du dementsprechend auch in Delphi so deklarieren. Zusätzlich musst Du dir das zugehörige Objekt holen.
Delphi liefert für IShellLink IIRC die Deklaration in einer der zahlreichen Units schon mit (könnte ShellObj sein). Beispiele zur Verwendung dürfte es im Forum oder bei den Schweizern geben.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Mo 08.02.10 19:26
Hallo BenBE,
habe die IShellLink-Sachen in der ShellObj gefunden, aber leider ist die Dokumentation meiner Delpi-Version schlecht und beim Umbau bekomme ich die Fehlermeldung "Inkompatible Typen: 'Array' und 'String' wenn ich den Dateipfad übergeben will. Eigentlich sind Strings ja "Array of Char" und bei Microsoft in der "WIN32_FIND_DATA Structure" ein "TCHAR cFileName[MAX_PATH]". Leider habe ich die Delphi-Deklaration "TWin32FindData" nicht finden können und die Hilfe schweigt sich zu diesem Thema aus. Vielleicht hat ja jemand einen Tipp, bevor ich Stunden probiere. Passende Beispiele habe ich bis her leider auch noch nicht gefunden.
Grüße von der Nordsee
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 08.02.10 23:06
TChar <> Char. Außerdem Array of Char in C ist in Delphi wesentlich besser als PChar zu übersetzen.
Bei den Delphi-Typen eher noch ein A bzw. W anhängen, je nach dem ob AnsiChar oder Widechar.
Außerdem: Das IShellLink-Interface aus der ShellObj ist schon vollständig; incl. der zu verwendenden Typen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Di 09.02.10 11:11
Hallo BenBE,
PChar hatte ich probiert, mit dem gleichen Ergebnis. Auch Anhängen von A oder W hat nichts gebracht. Laut Microsoft ist TChar:
| Zitat: | | The TCHAR data type is a Win32 character string that can be used to describe ANSI, double-byte character set (DBCS), or Unicode strings. For ANSI and DBCS platforms, TCHAR is defined as shown in the following Syntax section. For Unicode platforms, TCHAR is defined as synonymous with the WCHAR type. |
Es kommt also darauf an, wie es in Delphi deklariert ist. Aber beim Stöbern mit verschiedenen bei MS gefundenen Stichworten habe ich mit "WIN32_FIND_DATA" die richtige Lösung gefunden:
www.delphi-forum.de/...hlight=win32finddata
Hier ist ein Quelltext, mit dem der Link ausgewertet werden kann.
Grüße von der Nordsee
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 09.02.10 14:25
Peter18 hat folgendes geschrieben : | Hier ist ein Quelltext, mit dem der Link ausgewertet werden kann.
Grüße von der Nordsee |
Welcher Quelltext  Oder meinst im Link?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Peter18 
      
Beiträge: 489
Erhaltene Danke: 2
Delphi4
|
Verfasst: Di 09.02.10 15:53
Hallo BenBE,
einfach dem Link folgen. Ist hier im Forum.
Grüße von der verscheiten Nordsee
|
|
|