如何在C ++函数中访问iOS项目中的文件?

时间:2016-02-27 00:37:13

标签: c++ ios xcode swift opencv

所以我通过我的OpenCVWrapper调用我的C ++函数。在这个函数中,我必须打开一个位于我的Xcode项目中的文件。是否可以在C ++函数中指定所需的路径? 或者我必须通过Swift中的OpenCVWrapper传递文件?

简而言之,它看起来像是:

func sample() {
    OpenCVWrapper.booProcess()
}
OpenCVWrapper.mm

中的

@implementation OpenCVWrapper : NSObject

+ (void)booProcess {
    boo();
}

- (void)boo:
{
    return boo();
}

@end

blink.cpp

void boo()
{
    cv::CascadeClassifier my_cascade;
    my_cascade.load("bar.xml");
}

已添加所有必需的包装。

enter image description here

2 个答案:

答案 0 :(得分:2)

我没有找到任何正确的方法来获取C ++函数中的文件路径。所以最明显的解决方案是在Swift中获取路径的String表示。

let path = NSBundle.mainBundle().pathForResource("bar", ofType:"xml")

然后将它通过包装器传递给C ++函数

OpenCVWrapper.booProcess(path)

在OpenCVWrapper.mm中,您必须将NSString转换为std::string

std::string *mypath = new std::string([path UTF8String]);

然后你可以通过包装器将这个路径传递给C ++函数。

+ (void)booProcess:(NSString*)path {
    std::string *mypath = new std::string([path UTF8String]);
    boo(*mypath);
}

答案 1 :(得分:0)

不幸的是,目前无法从Swift调用C ++代码。您必须在Objective-C中包装OpenCVWrapper,然后在Swift中调用它。

有关详细信息,请参阅Using Swift with Objective-C