Получение пути к текущему / собственному пакету

При написании кроссплатформенного модуля мне нужен был способ получить путь к каталогу модуля (чтобы я мог получить доступ к файлам в папке модулей, например, к файлам настроек и ресурсам). Мой модуль, в настоящее время скомпилированный как пакет, загружается произвольными процессами. Получить путь к моему модулю довольно легко в Windows, вот так:

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

Я не смог найти аналогичный метод на OSX. Я старался _NSGetExecutablePath() но он только получает путь к основной программе. Также попробовал метод здесь.

Однако он также получает путь к основному исполняемому файлу. Каков общий метод для этого на OSx?

С уважением

редактировать:

Grady Player показал мне путь 🙂 Я скомпилировал следующий код, используя NSBundle:

/*
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;
}

1

Решение

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

будет работать для динамической библиотеки …

или если вы ищете свой главный

    [[NSBundle mainBundle] bundlePath];

также bundleURL … см. NSBundle Документация

тогда ваши ресурсы должны быть относительно вашего основного пакета.
ты можешь использовать

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]