Vorschläge für die Verwendung von Delphi, um DLL -Multiplexedateien zu erstellen
Versuchen Sie, Standard -DLL -Schnittstellen zu verwenden. Dies bedeutet, dass der übergebene Parametertyp und die Funktionsrückgabe -Typ nicht für Delphi wie String (ANSISSTRING) sowie dynamische Arrays und zusammengesetzte Typen (z. B. Datensätze), die diese Arten von Mitgliedern enthalten diese Art von Mitgliedern. Wenn Sie den String -Typ oder einen dynamischen Array -Typ verwenden und der Anrufer kein Delphi -Programm ist, melden Sie im Grunde einen Fehler. Ein Fehler kann auch auftreten, wenn der Anrufer Delphi ist, der Anrufer oder der Callee nicht in der ersten Einheit der Projektdatei, die nicht Sharemem ist.
Wenn es sich bei dem Anrufer um eine Delphi -Anwendung handelt, können Sie möglicherweise Objekte verwenden, die keine Datenelemente des verbotenen Typs (String, Dynamic Array) als Parameter oder Rückgabewerte enthalten, aber auch so weit wie möglich vermieden werden sollten.
Wenn der Anrufer und die angerufene Partei beide Delphi -Programme sind und String- oder Dynamic Array als Parameter verwenden müssen, muss die erste Einschlusseinheit der Projektdatei zwischen den beiden Parteien Sharemem sein. (Das C ++ - Builder -Programm mag gleich sein, aber es wurde nicht getestet.)
Wenn der Anrufer kein Delphi -Programm ist, String, dynamisches Array, zusammengesetzte Datentypen und Klasseninstanzen, die String oder dynamische Arrays enthalten, können nicht als Parameter oder Rückgabewerte verwendet werden.
Um den Multiplexing -Bereich von DLLs zu verbessern und mögliche Fehler zu vermeiden, sollte der Standard -API -Standard -Parametertyp von Win32 zuvor verwendet werden. Dynamische Arrays werden in den Zeigertyp (@Array [0]) konvertiert und fügen Sie die Länge des Arrays hinzu.
Wenn der Anrufer und die angerufene Partei beide Delphi -Programme sind und nicht die obige Konvertierung zum Schreiben durchführen möchten, wird empfohlen, die Form eines Laufzeitpakets zu verwenden. Laufzeitpakete können die korrekte Freigabe dynamisch zugewiesener Daten sicherstellen. Auf diese Weise zeigt es aufgrund seiner Erweiterung (.bPL), dass die Datei auf Delphi/C ++ Builder beschränkt ist (im Gegensatz zu DLL).
Versuchen Sie zweitens, Überlastungsfunktionen/-prozesse so weit wie möglich zu verwenden. und Methoden in Delphi, wie z. B. createByDefaultFile und createFault.
Als Anbieter von DLLs sollten Sie schließlich direkte Programmierrinten -Dateien wie .pas oder .dcu in Delphi (vorzugsweise .pas, wie es Kommentare geben können), .H und .lib in C und C ++ angeben. Anstatt Benutzer es selbst erstellen zu lassen. Dies ist besonders wichtig, wenn Sie eine Überlastfunktion/einen Überlastungsprozess haben müssen. Als Delphi -Anwendung kann die angegebene .PAS -Datei im Voraus (mit Externe zur Angabe der Ausgabefunktion in der DLL) oder später (mit Lastlibrary und GetProcaddress) angeschlossen werden. zeigt, dass es formell (oder hiqos) und garantiert ist.