Hallo,
hat jemand schon mal versucht, GetModuleName mit einem
Handle für die 'TMSSmoothControlsPackPkgD2009.bpl' aufzurufen?
Folgender Code läuft bei mir auf eine
Exception, die ich mir nicht erklären kann:
Delphi-Quellcode:
procedure BplInfo (ts: TStrings);
{+++++++ BplInfo ++++++++++++++++++++++++++++++}
function BplPath (
const BplName:
String): AnsiString;
var MHnd: Cardinal;
j,k: integer;
ModuleBuffer:
array [0..63]
of AnsiChar;
PathBuffer:
array [0..255]
of Char;
begin
StrPCopy(@ModuleBuffer,BplName);
MHnd := GetModuleHandle(@ModuleBuffer);
if MHnd = 0
then Result := '
nicht geladen'
else begin
Result := GetModuleName(MHnd);
end;
Result := BplName+'
: "'+Result+'
"';
end;
{+++++++ BplInfo ++++++++++++++++++++++++++++++}
begin
try
ts.Append(BplPath('
bdertl120.bpl'));
ts.Append(BplPath('
dbrtl120.bpl'));
ts.Append(BplPath('
designide120.bpl'));
ts.Append(BplPath('
rtl120.bpl'));
ts.Append(BplPath('
tee8120.bpl'));
ts.Append(BplPath('
TMSSmoothControlsPackPkgD2009.bpl'));
ts.Append(BplPath('
vcl120.bpl'));
ts.Append(BplPath('
vclactnband120.bpl'));
ts.Append(BplPath('
vcldb120.bpl'));
ts.Append(BplPath('
vclimg120.bpl'));
ts.Append(BplPath('
vclsmp120.bpl'));
ts.Append(BplPath('
vclx120.bpl'));
ts.Append(BplPath('
VirtualTreesD12.bpl'));
ts.Append(BplPath('
xmlrtl120.bpl'));
except on e:
Exception
do ts.Append('
BplInfo: "'+e.
Message+'
"');
end;
end;
Das Ergebnis sieht dann so aus:
bdertl120.bpl: "C:\Windows\system32\bdertl120.bpl"
dbrtl120.bpl: "C:\Windows\system32\dbrtl120.bpl"
designide120.bpl: "C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin\designide120.bpl"
rtl120.bpl: "C:\Windows\system32\rtl120.bpl"
tee8120.bpl: "C:\Windows\system32\Tee8120.bpl"
BplInfo: "Zugriffsverletzung bei Adresse 003C4761 in Modul 'test.bpl'. Lesen von Adresse 00000038"
Die ersten 5 Aufrufe gehen also sauber durch, und dann kommt die TMS...bpl dran und es kracht.
Mit GetModuleFileName hab' ich es auch probiert, dasselbe Problem.
Hat jemand 'ne Idee?