Aufrufen von C++ von Objective-C
Für diejenigen von Euch, die erfolgreich wurden, können zum Aufruf von C++ - code von Objective-C, Sie bitte mich aufklären?
Diese link sagt, Sie brauchen, um wickeln Sie Ihre C++ - code unter Verwendung einer Technik, die er beschreibt in seinem Artikel. Es sieht gut aus, aber ich habe immer noch Probleme.
Diese link sagt, dass, solange die Objective-C-Klasse-Aufruf der C++ - Klassen umgewandelt wurde .mm (Objective-C++) Klasse, dann sollten die beiden arbeiten gut zusammen.
Jeder dieser Ansätze verursacht mir Kummer, die minute, die ich versuchen, fügen Sie einen Aufruf der Methode. Kann jemand bitte geben Sie mir den code für eine einfache " Hello World iOS-app, verwendet Objective-C für die "Hallo" - Teil und einen C++ - Klasse für die "Welt" - Teil mit einem Objective-C++ - Klasse in der Mitte? Oder muss ich trotzdem das gesamte Konzept falsch?
Für die meisten Teil, den Sie gerade werfen alle "gotta work together" - code in einer .mm-Datei, und rufen Sie nach Bedarf hin und her. Die einzige wirkliche "Manko" ist der Speicher-management.
Beschreiben Sie Ihre Trauer im detail.
Hast du eine Lösung für dieses ? ich möchte auch eine einfache helloword-app zu wissen, dass es tatsächlich funktioniert
ja, habe ich. Gebt mir ein paar und ich gebe Ihnen die Hilfe, die Sie suchen. 🙂
InformationsquelleAutor Patricia | 2013-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im wesentlichen müssen Sie ein ObjC-Klasse mit .mm Verlängerung, ruft ein ObjC-Klasse mit .mm Verlängerung. Der zweite wird als C++ - wrapper-Klasse. Die wrapper-Klasse aufrufen wird Ihre tatsächliche .cpp-Klasse. Es ist ein wenig schwierig, also werde ich Ihnen einige verbose code. Hier ist eine übersicht über das Projekt:
In Ihrem ObjC-code (ViewController) Sie nennen würde, die CplusplusMMClass
Hier ist die CplusplusMMClass .h und .mm
Hier ist WrapperClass .h und .mm
Hier ist die PureCplusplusClass .h und .cpp
Dieser code ist nicht perfekt! Ich habe Probleme mit der namespace-test erkannt wird. Ich werde aktualisieren, wenn ich kann.
Aber das sollte Euch da!!!!
Hi, Andrew: die Fehlermeldung, Die Sie bekommen suggeriert, dass das problem mit Ihrem Architektur-Einstellungen oder wie Sie sind zu verknüpfen. Ich habe ein neues Projekt erstellt, da der code oben ist etwas veraltet. Anscheinend müssen wir nicht mehr verwenden "#if __cplusplus" und die C++ #ifndef und #define sind unterschiedlich. Das neue Projekt befindet sich hier: https://drive.google.com/open?id=0B8tC1ewFw3KlZ2RZM28yQmhPRTg. Wenn Sie weiterhin Probleme haben, finden Sie die Antworten auf diese Frage: stackoverflow.com/q/7533321/1735836
Andrew: Lassen Sie mich wissen, wenn Sie noch Probleme haben und nicht finden die Antwort. Ich bin mal gespannt.
Hallo ich habe das gleiche problem und ich habe Ihre Projekt-Formular von google drive, aber ich kann es nicht benutzen weil es nicht storyboard."/Benutzer/xinruchen/Downloads/HelloWorld/HelloWorld/Base.lproj/LaunchScreen.storyboard: Interface Builder konnte nicht öffnen Sie das Dokument LaunchScreen.storyboard", weil Sie nicht existieren." thx
Habe ich noch nicht angeschaut, dieses Projekt in den Jahren, und ich habe keine Ahnung, wie viel geändert hat, aber ich werde versuchen, einen Blick auf, irgendwann in dieser Woche.
InformationsquelleAutor Patricia
Andere (ausgedachte):
Verwenden Sie eine C++ - Klasse als ein ivar:
Datei Foo.h
Datei: Foo.mm
Hinweis:
Eine ausführbare Datei kann explizit linken gegen die C++ - Standardbibliothek, z.B. durch hinzufügen eines zusätzlichen flag "Other Linker Flags":
-lc++
Alternativ die
main.m
- Datei kann umbenannt werden, ummain.mm
.Letzteres ist robuster bei der Auswahl der "richtigen" Bibliothek, da die tool-Kette wird das tun selbst. Aber vielleicht für jemand anderen untersucht das Projekt, eine "umbenannt main.m" kann nicht sein, dass offensichtliche und kann zu Verwechslungen führen.
InformationsquelleAutor CouchDeveloper
Anfrage; ein Beispiel:
Der OP erwähnte mit Objective-C++ zum Aufruf von C++ und das ist, was dieses veranschaulicht.
Es gibt keine Objective-C. Aufrufen von C zu C++ ist nicht wirklich zu beantworten die Frage.
Betrachten Sie die zweite option spezifiziert durch die OP, die Sie betrachtet haben. Ich verstehe nicht, warum sind Sie so pedantisch.
Sind Sie richtig. Ich war auf der Suche nach eine einfache Möglichkeit zum aufrufen einer C++ - Methode von Objective-C und ich war/bin unter dem Eindruck, dass ich zu rufen Sie den C++ code von Objective-C++.
InformationsquelleAutor trojanfoe