Autor Beitrag
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Di 09.09.03 20:01 
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:
procedure ReadLink(const ShortCutName:string;var Target,Args,WorkDir,
 Description,Icon:string;var IconNo,ShowCmd:integer;var HotKey:Word);
var IObj:IUnknown;
    Link:IShellLink;
    IPFile:IPersistFile;
    ShortCutNameW:WideString;
    FindData:_Win32_Find_DataA;
    Buffer:array[0..MAX_PATH-1of Char;
begin
 IObj := CreateComObject (CLSID_ShellLink);
 Link := IObj as IShellLink;
 IPFile := IObj as IPersistFile;

 ShortCutNameW:=ShortCutName;
 IPFile.Load(PWChar(ShortCutNameW),0);

 with Link do begin
  GetPath(Buffer,SizeOf(Buffer),FindData,0);
  Target:=StrPas(Buffer);
  GetWorkingDirectory(Buffer,SizeOf(Buffer));
  WorkDir:=StrPas(Buffer);
  GetArguments(Buffer,SizeOf(Buffer));
  Args:=StrPas(Buffer);
  GetDescription(Buffer,SizeOf(Buffer));
  Description:=StrPas(Buffer);
  GetHotkey(HotKey);
  GetShowCmd(ShowCmd);
  GetIconLocation(Buffer,SizeOf(Buffer),IconNo);
  Icon:=StrPas(Buffer);
 end;
end;

Mit diesem Code lese ich Informationen aus LNK-Dateien aus, was auch funktioniert. Erfolgt der Aufruf jedoch aus einem Thread, so erhalte ich eine Exception. "CoInitialize wurde nicht aufgerufen" von "EOleSysError". Beim Aufruf über den MainThread (Application) klappt alles. Was kann ich tun?

Danke

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 09.09.03 20:42 
maxk hat folgendes geschrieben:
Was kann ich tun?

Hm, mal lesen ...
Zitat:
Erfolgt der Aufruf jedoch aus einem Thread, so erhalte ich eine Exception. "CoInitialize wurde nicht aufgerufen" von "EOleSysError".

:wink: Vielleicht "CoInitialize" (ActiveX-Unit) einmal aufrufen? Am Programmende dann aber "CoUninitialize" nicht vergessen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 09.09.03 23:33 
Verwendest du in deinem Projekt die Unit Forms? Normalerweise wird ja in der dpr-Datei Application.Initialize aufgerufen, und das wiederum ruft CoInitialize auf. Falls du die Unit Forms und damit das TApplication-Objekt nicht verwendest musst du das eben selbst erledigen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 11.09.03 18:28 
Forms ist eingebunden. Meine Frage aber trotzdem, warum geht es nicht in Threads?

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.