Für bestimmte DLL -Kapselungsobjekte finden Sie unter Liu Yis "DLL -Kapselung und Anrufobjekttechnologie in Delphi" und den Quellcode für das Buch.
Ich habe einige seltsame Probleme beim Kompilieren von DLLs mit Delphi gestoßen.
1. Das von Delphi erstellte DLL -Projekt schreibt: Sharemem muss die erste Einheit in der Verwendung von Klausel Ihrer Bibliothek und der Ihres Projekts sein. Hier wird erwähnt, dass sowohl DLL -Projekte als auch Projekte, die die DLL unter Verwendung der DLL auf die Sharemem -Einheit verweisen müssen.
Es ist am besten, Sharemem -Einheiten in das Projekt hinzuzufügen, da in der tatsächlichen Verwendung sich manchmal zwischen dem Projekt und der DLL übergeben werden, wenn das Objekt Eigenschaften des String -Typs hat, können seltsame Fehler auftreten.
2. Definitionsproblem des Aufrufs von DLL -Funktion:
Bei Ausgabe in DLL: Funktion ABC: iInterface;
Funktionsaufrufe werden wie folgt im Programm definiert:
Typ
Tfunc = function: iInterface;
Ein seltsamer Fehler tritt auf, der als den in der DLL definierten definiert werden sollte:
Typ
Tfunc = Funktion: iInterface;
3. Wenn Sie die Schnittstelle in der DLL verwenden, denken Sie daran, sie auf NIL zu setzen, bevor das Objekt nach der Verwendung in der DLL freigegeben wird.
4. Debugging DLLs in Delphi: Ich begegne das Problem oft, dass ich beim Debuggen von DLLs keine Haltepunkte hinzufügen kann. Überprüfen Sie die Einstellungen in der DLL, ob der Ausgangspfad der kompilierten DLL die gleiche Einstellung des Hauptprogramms entspricht, die die DLL aufruft und ein absoluter Pfad sein sollte.
5. In "DLL -Kapselung und Aufruf der Objekttechnologie in Delphi" ist die Hauptbegrenzung von DLL bei Kapselungsobjekten
"1. Die Anwendung, die die DLL aufruft
2. . .
3. . .
Es scheint keine solche Einschränkung zu geben, wie Objekte im Hauptprogramm für DLLs verwendet werden können. Ich frage mich, warum?