3

正如此处发布的大多数其他 Objective-C 问题一样,我也是 ObjC 的新手。

我正在基于我们现有的用 C# 和 C++ 编写的产品编写一个 iOS 应用程序。

我已经用 C++ 编写了一个完整的库,我希望直接在 iOS 设备中使用它,只需提供一些#ifdef 来在必要时阻止代码。例如,我有一个完整的 C++ 类,用于使用 Winsock 发出 HTTP 请求。因此,为了能够将这部分 API 转换为 Obj-C,我希望我可以编写一些简单的 Obj-C 类,用于通过 iOS 内置库发送和接收数据,使用 NSURL、NSStrings、等等

但是,我似乎无法将东西传递到我用 C++ 编写的 Obj-C(++) 方法中。我想在这里找到,当然,在我为一个失败的事业浪费太多时间之前,这是否可能。

我的理解是,按照 Obj-C 的构建/设计方式,实际上几乎所有的 C 代码都在幕后,因此合并这两种语言并不困难。

我在这里错了吗?例如,我可以这样做:

class NameValueCollection {
  NameValueCollection() { };
  NameValueCollection(std::string key, std::string value);
  ~NameValueCollection();
...
};

然后,比如说,在 Obj-C 中(实际上是 Obj-C++,我已经更改了文件编译成的语言......)

-(BOOL)initWithValues:(NameValueCollection*) nvc result:(NSString*)result;

我这样做是不是有点不合时宜?如果是这样,那么是否有可能做这两个替补之一?

从 C++ 类/对象/方法中调用 ObjC++ 方法,或者,在 Obj-C++ 方法中调用 C++ 方法?

我不得不承认,我有点假设最后一个备用电源会起作用,而且我很确定第一个备用电源会起作用,但如果第一个选项是可能的,那将是最好的。任何人都可以对此提供很好的见解,即使我通过在 Obj-C++ 中尝试这个来采取正确的方法,或者这只能在 Obj-C 中实现,调用 C 函数而不是 C++ 方法,所以我可以使用我们的在 iOS 应用程序中预定义(和预调试)对象,只需在橡胶遇到众所周知的道路时替换 Obj-C++ 代码......

我是 C++ 库代码的原始作者,所以如果有必要,我实际上可以对其进行更改,甚至可以使用预处理器来发挥我的优势,但显然我必须在 C++ 方面更改的代码越少,好多了!:) 我没有将 C++ 代码构建到 Dynlib 或类似的东西中,我只是在源代码控制级别的项目之间共享文件。但是,我愿意接受任何能让整个事情按照我尝试的方式工作的想法。

提前谢谢各位...

4

1 回答 1

0

我知道绝对可以在 obj-c++ 中使用 c++ 类/方法。我一直在使用 BulletPhysics 库(C++)进行一些 iOS 开发,我可以毫无问题地使用它的功能。我认为您需要做的就是将库的源文件添加到您的项目中。使用 BulletPhysics,在外部将库编译为框架,然后导入框架对我来说无法正常工作。所以我所做的就是将库的源文件添加到项目中,然后只需#include 我需要的头文件,然后 xcode 负责编译库和我的源代码,然后它就可以工作了。

只需确保您使用 .mm 作为使用库头文件的扩展名。

于 2012-06-27T15:18:08.267 回答