Hallo,
mein neues Problem hat große Ähnlichkeit mit diesem
www.delphi-forum.de/...ht+in+DLL_94735.html.
Ich brauche nämlich noch eine "Rückruf-Funktion", mit der die DLL bestimmte Aktionen im Programm durchführen kann...
Also (Dieses Mal Originalquelltext

):
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:
| procedure TPresentation.Callback(ClassID,Flags : integer; Action : cardinal); begin showmessage('hy'); end;
ObjectClasses[i].Create(i,@TPresentation.Callback); (...) type TPresCallback = procedure(ClassID,Flags : integer; Action : cardinal);
var DllCallback : TPresCallback;
(...)
procedure Create(Id : integer; Callback : Pointer); begin showmessage('1'); DllCallback := TPresCallback(Callback); if (assigned(DllCallback)) then DllCallback(0,0,0); showmessage('2'); end; |
Beim Ausführen kommt dann korrekter Weise "1" --> "hy" --> "2". Wenn die Procedure in der DLL fertig ist, kommt der Fehler.
(Wenn
if (assigned(DllCallback)) then DllCallback(0,0,0); noch in einer Klasse in der DLL steht, kommt erst nochmal "hy", und dann der Fehler

)
Weil dieses Problem erhebliche Ähnlichkeit mir meinem Vorherigen (als ich ShareMem noch nicht richtig eingebunden hatte) zeigt, gehe ich davon aus, dass es ebenfalls durch mangelhafte Speicherverwaltung ausgelöst wird, aber jetzt habe ich ShareMem, das ich derzeit noch verwende, eingebunden...
Kann es sein, dass man derartige Rückrufe normaler Weise über Windows-Messages löst? Ich meine, dass währe dadurch langsamer und auch stark eingeschränkt...
Was soll ich machen / was habe ich falsch gemacht?