При написании кроссплатформенного модуля мне нужен был способ получить путь к каталогу модуля (чтобы я мог получить доступ к файлам в папке модулей, например, к файлам настроек и ресурсам). Мой модуль, в настоящее время скомпилированный как пакет, загружается произвольными процессами. Получить путь к моему модулю довольно легко в 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;
}
[[NSBundle bundleForClass:[thisClass class]]bundlePath];
будет работать для динамической библиотеки …
или если вы ищете свой главный
[[NSBundle mainBundle] bundlePath];
также bundleURL … см. NSBundle Документация
тогда ваши ресурсы должны быть относительно вашего основного пакета.
ты можешь использовать
[[[NSBundle mainBundle] bundlePath]stringByAppendingPathComponents:@[@"Contents",@"Resources"]];
Других решений пока нет …