2016-02-27 97 views
0

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

总之,它看起来像水木清华:

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

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

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

遗憾的是,目前不可能从斯威夫特调用C++代码。您必须在Objective-C中包装OpenCVWrapper,然后在Swift中调用它。

有关更多信息,请参阅Using Swift with Objective-C

+0

Eh?我已经为C++代码做了所有必要的包装。问题不在于直接从swift使用C++。这是关于'如何访问C++函数内的iOS项目中的文件?' – albertpod

+0

哎呀,我的歉意。 –

+0

看看这个:http://stackoverflow.com/questions/23438393/new-to-xcode-cant-open-files-in-c 如果是这样,我会改变我的答案链接到它并给出一个简短的概要。 –

相关问题