我正在写使用Objective-C的前端和C ++的图形处理和网络通信的图形应用程序。我看周围苹果公司的网站上寻找一种方式来链接或者是名为.dylib 的.so 在它我的C ++代码到我的Xcode项目,但似乎没有任何工作。我能拿到项目引用,并链接反对它,但是当我试图从名为.dylib调用的函数,它是说,它不知道我要怎样做。有谁知道什么是对怎么回事?

我知道,Objective-C中有我需要做的图形和网络的所有库,但我只是觉得做这样的。我还没有在一段时间做了很多C ++,我想了解更多的Objective-C,而不是同时使用它们?所以有什么更好的方式

谢谢, 罗比

有帮助吗?

解决方案

你会打一个障碍在什么叫做“名称重整”的形式。 C ++存储与OBJ - C的不兼容的方式发挥功能的名字。

目标-C不实现以相同的方式如C ++类,因此它不会喜欢它。

解决此的一种方式是实现一组简单的C函数调用其中的C ++函数。这将是不断的C函数的数量尽可能低一个很好的挑战!你会拥有一个不错的紧凑型接口! :)

要在C声明这些函数++文件,你需要将它们标记为C有:

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

此禁用标准名称的mangling。

建立一个与原型的头文件,所有这些功能,你可以与你的目标C代码共享。

您将无法通过周围的类以同样的方式(因为你的ObjC代码不能使用它们),但你可以通过指针(虽然你可能有说谎关于类型一点点)。

其他提示

大多数I上工作项目的具有ObjC前端和C ++后端。如果你只与功能的处理,然后戴夫赌博的名字撕裂修补程序是正确的,但如果你正在处理更复杂的情况,你需要同时处理ObjC和C ++对象,最好的办法是来包装C ++对象在ObjC对象。采用不透明的引用(这是说void*的一个非常有趣的方式),你其实可以用手围绕C ++在ObjC,反之亦然对象。我有一些示例代码可能有益。

这是说,对于图形你可能会采取一个严重的性能问题做定制的C ++而不是使用核心图片和相关框架。核心影像与其它图形框架高度为Mac优化,你不太可能与手卷C ++做的更好++(甚至很精心编写的C ++,是不是专门为Mac)。当你移动到10.6和大中央调度,性能差异将会更加显着,因为你会失去所有的并行化的进步,你会得到免费的除外。这有没有关系ObjC;核心形象是C.您可以从C ++所有你喜欢称呼它。我只是建议对自定义图形处理Mac上的任何语言,除非你需要的可移植性,或者你必须击败核心图像所需的专长。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top