2014-03-18 3 views
1

크로스 플랫폼 모듈을 작성하는 동안 configs 및 자원과 같은 modules 폴더의 파일에 액세스 할 수 있도록 모듈 디렉토리에 대한 경로를 검색하는 방법이 필요했습니다. 현재 번들로 컴파일 된 모듈은 임의의 프로세스에 의해로드됩니다. 내 모듈의 경로를 얻는 것은 다음과 같이 매우 간단합니다.현재/자신의 번들에 대한 경로 검색

GetModuleFileName(GetModuleHandle(0), buf, size); // copies the path of the current DLL into buf 

OSX에서 비슷한 방법을 찾을 수 없었습니다. 나는 _NSGetExecutablePath()을 시도했지만 메인 프로그램의 경로 만 검색합니다. 또한 the method here을 시도했습니다.

그러나 주 실행 파일의 경로도 가져옵니다. OSx에서 그렇게하는 일반적인 방법은 무엇입니까?

감사

편집 :

/* 
    this could be anything apparantly 
*/ 
@interface dummyObject : NSObject 
- (void) dummyMethod; 
@end 

@implementation dummyObject 
- (void) dummyMethod { 
} 
@end 

int GetBundlePath(char * buf, int bufSize) 
{ 
    NSString * path = [[NSBundle bundleForClass:[dummyObject class]]bundlePath]; 
    const char * intString = [path UTF8String]; 
    int length = strlen(intString); 
    int smallestLength = length > bufSize ? bufSize : length; 
    memcpy(buf, intString, smallestLength); 
    [path release]; 
    return smallestLength; 
} 

답변

0
[[NSBundle bundleForClass:[thisClass class]]bundlePath]; 

이 ... 동적 라이브러리에 대한

작동합니다 :

그래 디 플레이어 나에게 길을 보여 주었다 : 나는 NSBundle를 사용하여 다음 코드를 컴파일

또는 메인을 찾고있는 경우

[[NSBundle mainBundle] bundlePath]; 

도 bundleURL은 ... 당신의 자원이 메인 번들을 기준으로해야 다음 NSBundle Documentation

를 참조하십시오. 사용할 수 있습니다

[[[NSBundle mainBundle] bundlePath]stringByAppendingPathComponents:@[@"Contents",@"Resources"]]; 
+0

정말 고마워요. 나는 완전히 objective-c와 관련된 새로운 것들이다. (C++을 사용한다면 그렇지 않다.) 첫 번째 예제에서 약간 확장 해 주시겠습니까? 특히 thisClass는 반환 된 번들에 의해 인스턴스화 된 클래스를 참조합니다. 나는 이것을 좋아하는 사람이 있다는 것을 알았지 만 이것이 유효한가? NSBundle * 번들 = [NSBundle bundleForClass : [self class]]; 나중에 반환 된 번들에 대한 경로를 검색하기 위해 bundlePath를 호출하겠습니까? – Shaggi

+0

@Shaggi 클래스는 클래스와 인스턴스 메소드이기 때문에 모든 로컬 클래스 나 인스턴스 ... 예를 들어'[MyDog class]'또는'[aDog class]'는 똑같은 것을 반환해야합니다 ... –

+1

감사합니다. 너는 너무 많이 - 작업 예제로 주제를 업데이트했다. – Shaggi