Betrachten Sie eine einfache Beispielklasse:
%Vor%Nun sage ich, dass ich das in extern "C" einfügen möchte, damit ich es aus vielen verschiedenen Programmiersprachen wie C # und Java aufrufen kann. Ich versuchte folgendes, was zu funktionieren schien:
%Vor%Ist das tragbar? Ist der Typ unsigned "unsigned long" groß genug für einen Objektzeiger? Irgendwelche anderen Probleme mit diesem Ansatz?
Vielen Dank im Voraus für die Antworten!
Ja. Es ist schlecht. Wirklich schlecht. unsigned long
- nur nein. Geben Sie ein korrekt eingegebenes BankAccount*
zurück - die anderen Sprachen sehen es am anderen Ende als generischen Zeiger (z. B. System.IntPtr), und es ist nicht erforderlich, einen nicht typisierten Zeiger zurückzugeben, wenn die binäre Schnittstelle ohnehin keine Zeiger eingibt.
Das sieht grundsätzlich gut aus mit einem Vorbehalt. Der Versuch, einen Integer-Typ zu verwenden, um einen Zeiger zu halten, ist keine gute Idee - viel besser, void*
zu verwenden, da dies definitionsgemäß die Breite eines Zeigers ist.
Eigentlich glaube ich, @ DeadMGs Antwort ist ein sauberer Ansatz als das.
Dies ist nicht portierbar, weil unsigned long
für einen Zeiger möglicherweise nicht lang genug ist. Eine nicht so seltene Plattform, wo dies passiert, ist win64.
Besser ptrdiff_t
oder void*
verwenden.
Tags und Links c c++ cross-platform