2016-02-27 101 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 如果是這樣,我會改變我的答案鏈接到它並給出一個簡短的概要。 –

相關問題