gpt4 book ai didi

c++ - Objective-C++ 调用 C 或 C++ 函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:00 27 4
gpt4 key购买 nike

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

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

我已经用 C++ 编写了整个库,我希望通过简单地提供一些 #ifdef 来在必要时阻止代码,从而直接在 iOS 设备中使用它。例如,我有一个完整的 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++ 上更改的代码越少方面,MUCH 更好! :) 我没有将 C++ 代码构建到 Dynlib 或类似的任何东西中,我只是在源代码控制级别在项目之间共享文件。但是,我愿意接受任何能让整个事情按照我尝试的方式进行的想法。

在此先感谢大家...

最佳答案

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

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

关于c++ - Objective-C++ 调用 C 或 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com