Das ist auch seltsam.
Mal mit der Exe getestet.
Delphi-Quellcode:
if subKeyFilePath.Count > 0 then
for I := 0 to subKeyFilePath.Count - 1 do
begin
if subKeyFilePath[i] = '{43D2E184-46AC-11d4-A8AF-00105AC582C2}' then
begin
if PRegKey.OpenKey(FilePath + '\' + subKeyFilePath[i] + '\InprocServer32', False) then
begin
Path := PRegKey.ReadString('(Standard)');
Label1.Caption := Path;
end;
break;
end;
end;
gebe ich anstelle von '(Standard)' ThreadingModel an dann wird Apartment zurück gegeben.
Bei der default Value immer ein Leerstring und genau hier steht der Pfad zur
DLL.
Zitat:
Auch nicht mit einer neuen, sonst nackten
DLL nicht?
Hab ich noch nicht getestet.
Das ist ärgerlich.
Ich habe vorher die
DLL (
ActiveX) mit CoCreateInstance initialisiert.
Nun habe ich gedacht weil diese sich nicht entladen ließ versuche ich die Typelib zur Laufzeit zu laden.
Also mit LoadLibrary in Verbindung mit LoadTypeLib
Um dann über FreeLibrary die
DLL zu entladen wenn sie nicht mehr gebraucht wird.
Das funktioniert ebenfalls nicht selbst wenn ich ein gültiges
Handle davon habe.
Ich kann das im Prozess Explorer verfolgen.
Das ist zum Haare raufen.
Hier dein Beispiel nochmal zurück mit meiner Änderung.
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils,
Classes,
Registry,
Windows;
procedure Main;
var
FilePath:
string;
Path:
string;
PRegKey: TRegistry;
subKeyFilePath: TStringList;
i: Integer;
begin
subKeyFilePath := TStringList.Create();
try
PRegKey := TRegistry.Create;
try
PRegKey.RootKey := HKEY_LOCAL_MACHINE;
FilePath := '
SOFTWARE\Classes\CLSID\';
if PRegKey.OpenKeyReadOnly(FilePath)
then
begin
if PRegKey.HasSubKeys
then
begin
PRegKey.GetKeyNames(subKeyFilePath);
PRegKey.CloseKey;
end;
end;
Writeln(subKeyFilePath.Text);
if subKeyFilePath.Count > 0
then
for I := 0
to subKeyFilePath.Count - 1
do
begin
if subKeyFilePath[i] = '
{43D2E184-46AC-11d4-A8AF-00105AC582C2}'
then
begin
if PRegKey.OpenKey(FilePath + '
\' + subKeyFilePath[i] + '
\InprocServer32', False)
then
begin
Path := PRegKey.ReadString('
ThreadingModel');
// mit (Standard) ersetzen verursacht Probleme Leerstring wird zurück gegeben.
Writeln('
GetValue := ' + Path);
break;
end;
end;
end;
finally
PRegKey.Free;
end;
finally
subKeyFilePath.Free;
end;
end;
begin
try
Main;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.