Ich schreibe eine Reihe von DLLs, mit denen andere Entwickler ihre eigene DLL als Erweiterung schreiben können. Im Delphi-Code verwende ich häufig Enums und Enum-Sets. Ich benutze enums durch DLLs. Ich weiß, dass ich ein enum durch eine DLL über verschiedene Projekte, die mit Delphi kompiliert werden, sicher verwenden kann. Ich bin mir jedoch nicht sicher, wie anpassungsfähig es in verschiedenen Sprachen ist.Ist es sicher, Enums über Interop-Grenzen hinweg zu verwenden?
Ist es sicher, Enums über eine DLL zu verwenden, während andere Sprachen unterstützt werden? Oder sollte ich es stattdessen als Integer ausgeben?
Aufzählungen müßten als ordinals weitergegeben werden, und Ihr Delphi-Code sollte mit [{$ MINENUMSIZE}] (http://docwiki.embarcadero.com/RADStudio/Berlin/en/Minimum_enumeration_size_%28Delphi%29) zu Stellen Sie sicher, dass Sie die Ordnungszahl der richtigen Größe verwenden, um plattformübergreifend kompatibel zu sein. Delphi packt Enums je nach Anzahl der Elemente in der Enumeration in unterschiedliche Byte-Größen, was dazu führen kann, dass einige Probleme mit Nicht-Delphi-Code hin- und hergereicht werden. –
Verwenden Sie für Interop min enum 4, da C enums nur int sind. –
@David: Laut C99 können sie kleiner als int sein, wenn der Compiler das will. Aber unter Windows werden sie alle 4 Byte (int) groß sein. –