Я считаю, что вам нужна функция GetModuleFileName , которую вы можете использовать следующим образом:
// get the full path to the current executable
wchar_t fullPath[MAX_PATH];
GetModuleFileName(NULL, fullPath, MAX_PATH);
// cut the string at the last slash, because we just want the directory
// not the actual executeable file name.
TCHAR *lastSlash = wcsrchr(fullPath, L'\\');
lastSlash = 0;
// directory where the executable is location is fullPath
Это будет работать независимо от текущего рабочего каталога, и в общем, вот как я делаю все вещи "относительного пути" (то есть я никогда не использую относительные пути, они всегда абсолютные пути , на основе значения, возвращенного из функции выше).