作为这里发布的大多数其他Objective-C问题一样,我也是ObjC的新手。我正在编写一个基于我们现有的用C#和C++编写的产品的iOS应用程序。我已经在C++中编写了一个完整的库,希望能够直接在iOS设备上使用它,只需提供一些#ifdef来阻止必要的代码。例如,我有一个完整的C++类,用于使用Winsock进行HTTP请求。因此,为了能够将API的这一部分转换为Obj-C,我希望我可以编写一些简单的Obj-C类,使用NSURL、NSString等内置库发送和接收数据。但是,我似乎无法将事物传递到我在C++中编写的Obj-C(++ )方法中。在我花费太多时间浪费在无用的事情上之前,我想在这里确定是否可能。据我所知,Obj-C的构建/设计方式实际上都是C代码,因此合并两种语言并不困难。我错了吗?例如,我能做到这样吗?
我尝试这样做是否太过分了?如果是,那么有两个替代方案之一可行吗?
从C++类/对象/方法中调用ObjC++方法,或者在Obj-C++方法中调用C++方法?
我必须承认,我有点假设最后一个替代方案会起作用,而且我非常确定第一个替代方案会起作用,但如果第一个选项可行,则最好。有人能提供深入的见解吗?我是否正确地尝试使用Obj-C++实现这一点,或者只能在Obj-C中调用C函数而不是C++方法,以便我可以在iOS应用程序中直接使用我们预定义(和预调试)的对象,只需在关键时刻用Obj-C++代码替换即可...
我是C++库代码的原始作者,因此如果需要,我可以对其进行更改,甚至可以利用预处理器,但显然,我需要在C++端更改的代码越少越好!:) 我没有将C++代码构建为Dynlib或任何类似的东西,我只是在源控制级别上共享文件。但是,我愿意接受任何可以使整个事情按照我尝试的方式工作的想法。
提前感谢大家...
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或任何类似的东西,我只是在源控制级别上共享文件。但是,我愿意接受任何可以使整个事情按照我尝试的方式工作的想法。
提前感谢大家...
.mm
扩展名来表示文件是一个Objective-C++文件。但是需要注意的是,Winsock调用将无法工作,它们需要被#ifdef掉并替换为标准Unix sockets调用或更高级别的本地网络API。 - wadesworld