2012-01-22 50 views

回答

1

儘管NSSearchPathForDirectoriesInDomains()是一個C函數,但它使用涉及自動釋放緩衝池的Foundation調用,因此您不能從純C代碼調用它(可以,但會發出緩衝池警告)。因此,簡約的方法是創建一個小包裝對象 - 文件:

#include <Foundation/Foundation.h> 

CFArrayRef appSupport() { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    CFArrayRef a = (CFArrayRef) NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory ,NSUserDomainMask, YES); 
    CFRetain(a); 
    [pool release]; 
    return a; 
} 

然後你就可以處理純C其餘部分,例如:

CFArrayRef a = appSupport(); 
if (CFArrayGetCount(a) > 0) { /* let's get the first value */ 
    CFStringRef s = CFArrayGetValueAtIndex(a, 0); 
    char path[PATH_MAX]; 
    CFStringGetFileSystemRepresentation(s, path, sizeof(path)); 
    /* path now has what you want */ 
} 
CFRelease(a); 

林不知道有任何直接的CF API將提供路徑。

+0

謝謝你。我現在有點瘋狂得到這個編譯。我添加了Foundation.framework(並且嘗試了Cocoa.framework)以「鏈接Binary與庫」,但它仍然給我20錯誤,如: '預期的標識符或'(''和'未知的類型名稱'NSString' ' 任何幫助將不勝感激。 – livings124

+1

請確保您的Cocoa源文件有一個* .m或* .mm文件名結尾。 –

+0

啊,我在C文件中使用它。 – livings124

1

的Objective-C是C.兼容,所以你可以簡單地換您的來電NSSearchPathForDirectoriesInDomains()一個簡單的C函數中,並有 返回一個const char *從您的其他(非可可兼容) C代碼中訪問。不過,您必須鏈接到相應的OSX庫。

相關問題