Ich komme so leider auch nicht weiter.
Den Formularvisualizer möchte ich nicht nutzen. Nur den StringReplacer.
Über OTA ermittle ich den aktuellen Thread.
Über CurThread.Evaluate(Expression...) wird der Ausgabetext ermittelt.
Das ergibt aber den ungewollten "TsoGuid($2FB1204) as IsoGuid".
Im folgenden Code wird der Text erfolgreich abgerufen, nur, dass ich den eben nicht ändern kann:
Gewünscht wäre: IsoGuid.AsString
Zitat:
Guid - IsoGuid - TsoGuid($2FB1204) as IsoGuid
-1
-2
-3
-4a "TsoGuid($2FB1204) as IsoGuid"
-5
--
Delphi-Quellcode:
CodeSite.Send(Expression + '
- ' + TypeName + '
- ' + EvalResult);
// Guid - IsoGuid - TsoGuid($2F21204) as IsoGuid
if (TypeName = '
IsoGuid')
then
begin
Result := '
IsoGuid! => ' + EvalResult;
CodeSite.Send('
-1');
if Supports(BorlandIDEServices, IOTADebuggerServices, DebugSvcs)
then
CurProcess := DebugSvcs.CurrentProcess;
if CurProcess <>
nil then
begin
CodeSite.Send('
-2');
CurThread := CurProcess.CurrentThread;
if CurThread <>
nil then
begin
CodeSite.Send('
-3');
repeat
begin
Done := True;
EvalRes := CurThread.Evaluate(Expression, @ResultStr, Length(ResultStr), CanModify, eseAll, '
', ResultAddr,
ResultSize, ResultVal, '
', 0);
case EvalRes
of
erOK:
begin
Result := ResultStr;
CodeSite.Send('
-4a "' + Result + '
"');
end;
erDeferred:
begin
CodeSite.Send('
-4b');
FCompleted := False;
FDeferredResult := '
';
FDeferredError := False;
FNotifierIndex := CurThread.AddNotifier(Self);
while not FCompleted
do
DebugSvcs.ProcessDebugEvents;
CurThread.RemoveNotifier(FNotifierIndex);
FNotifierIndex := -1;
if not FDeferredError
then
begin
if FDeferredResult <> '
'
then
Result := FDeferredResult
else
Result := ResultStr;
end;
end;
erBusy:
begin
CodeSite.Send('
-4c');
DebugSvcs.ProcessDebugEvents;
Done := False;
end;
end;
CodeSite.Send('
-5');
end
until Done = True;
end;
end;
CodeSite.Send('
--');
Also müsste CurThread.Evaluate irgendwie überschrieben werden. Aber dann müsste die als einziges bekannte Adresse ja auch in das Interface-Object gecastet werden.
Dann könnte ich das aber doch auch gleich (wie im vorigen Beitrag) in Visualizer direkt tun - nur dass das dort (noch) nicht funktionierte.
Sorry, ist etwas schwierig für mich.