크로스 플랫폼 모듈을 작성하는 동안 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;
}
정말 고마워요. 나는 완전히 objective-c와 관련된 새로운 것들이다. (C++을 사용한다면 그렇지 않다.) 첫 번째 예제에서 약간 확장 해 주시겠습니까? 특히 thisClass는 반환 된 번들에 의해 인스턴스화 된 클래스를 참조합니다. 나는 이것을 좋아하는 사람이 있다는 것을 알았지 만 이것이 유효한가? NSBundle * 번들 = [NSBundle bundleForClass : [self class]]; 나중에 반환 된 번들에 대한 경로를 검색하기 위해 bundlePath를 호출하겠습니까? – Shaggi
@Shaggi 클래스는 클래스와 인스턴스 메소드이기 때문에 모든 로컬 클래스 나 인스턴스 ... 예를 들어'[MyDog class]'또는'[aDog class]'는 똑같은 것을 반환해야합니다 ... –
감사합니다. 너는 너무 많이 - 작업 예제로 주제를 업데이트했다. – Shaggi