Frage

Ich schreibe eine grafische Anwendung Objective-C für das vordere Ende und C ++ für die Grafikverarbeitung und Netzwerk-Kommunikation. Ich las auf dem Apple-Website um nach einer Möglichkeit, entweder ein .dylib oder .so mit meinem C ++ Code in es mein Xcode Projekt zu verknüpfen, aber nichts schien zu funktionieren. Ich war in der Lage, das Projekt zu bekommen es und Link dagegen zu verweisen, aber als ich versuchte, von diesen .dylib Funktionen zu nennen, es sagt, dass es nicht wußte, was ich versucht habe zu tun. Hat jemand wissen, was hier los ist?

Ich weiß, dass Objective-C werden alle Bibliotheken hat ich brauchen würde, Grafiken und Vernetzung zu tun, aber ich fühle mich wie es, wie dies zu tun. Ich habe nicht viel C ++ in einer Weile getan und ich will mehr Objective-C lernen, so was könnte besser sein, als sie zusammen zu benutzen?

Danke, Robbie

War es hilfreich?

Lösung

Sie werden ein Hindernis in Form treffen, was „name Mangeln“ genannt wird. C ++ speichern Funktionsnamen in einer Art und Weise nicht kompatibel mit Obj-C.

Objective-C nicht implementiert Klassen in der gleichen Weise wie C ++, so geht es nicht, es zu mögen.

Ein Weg, um dieses ist eine Reihe von einfachen C-Funktionen zu implementieren, die die C ++ Funktionen aufrufen. Es wird eine gute Herausforderung sein, die Anzahl von C-Funktionen so gering wie möglich zu halten! Sie werden mit einem netten kompakten Schnittstelle am Ende! :)

Um diese Funktionen in einer C ++ Datei deklarieren, müssen Sie sie als C markieren mit:

extern "C" int function_name(char *blob,int number, double foo) {...}

Dies deaktiviert den Standardnamen-Mangeln.

Erstellen Sie eine Headerdatei mit den Prototypen für all diese Funktionen, die Sie mit Ihrem Ziel-C-Code gemeinsam nutzen können.

Sie werden nicht in der Lage sein, Klassen um auf die gleiche Weise passieren (weil Ihr ObjC Code kann sich nicht benutzen), aber Sie werden in der Lage sein, Zeiger zu übergeben (obwohl Sie über die Typen etwas zu liegen haben könnten ).

Andere Tipps

Die meisten Projekte auf arbeite ich habe eine ObjC Frontend und C ++ Backend. Wenn Sie ausschließlich mit Funktionen zu tun, dann Name Dave Gamble mangle fix ist richtig, aber wenn Sie mit komplexeren Situationen zu tun haben, in denen Sie sowohl mit ObjC und C ++ Objekten zu behandeln, Ihre beste Wette ist, die C ++ Objekte wickeln in ObjC Objekte. Mit undurchsichtigen Referenzen (das ist eine sehr andere Art ist void* zu sagen), die Sie tatsächlich C ++ Hand um Objekte können in ObjC und umgekehrt. Ich habe einige Beispielcode die hilfreich sein können.

Wie gesagt, für Grafiken sind Sie wahrscheinlich eine ernsthafte Leistung zu ergreifen, gehen Hit tun benutzerdefinierte C ++ anstatt mit Core Image und die damit verbundenen Rahmenbedingungen. Core Image und die anderen Grafikrahmen sind für den Mac hoch optimiert, und Sie sind sehr unwahrscheinlich, es besser machen mit handgerollten C ++ (oder sogar sehr gut geschrieben C ++, die nicht speziell für den Mac ist). Wie Sie auf 10,6 und Grand Central Dispatch bewegen, wird der Unterschied in der Leistung noch bemerkenswerter, weil Sie alle Parallelisierung Fortschritte verlieren werden, die Sie sonst kostenlos bekommen würden. Das hat nichts mit ObjC zu tun; Core Image ist C. Sie es aus C ++ aufrufen können alles, was Sie mögen. Ich empfehle nur gegen individuelle Grafikbearbeitung auf dem Mac in jeder Sprache, wenn Sie Portabilität benötigen, oder Sie haben das Know-how erforderlich, Core Image zu schlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top