経緯
配属先のプロジェクトにて、実行ファイル(exeを想定)と同じフォルダにdllとiniファイルを格納し、iniファイルに設定した内容を読み込んでdllを実行するという運用があり、iniファイルの格納先を正確に取得する方法を実現するために調べたことをメモとして記載しました。
参考にしたWebサイト
コードのイメージ
配属先のプロジェクトにて作成したコードをもとに一部変えたものを以下に記載します。ポイントは「GetModuleFileName」と「PathRemoveFileSpec」の両メソッドの処理で、それぞれ以下を取得します。
・GetModuleFileName:現在実行中の実行ファイルのフルパスを取得
・PathRemoveFileSpec:末尾のファイル名だけを削除
例,実行中のファイルが「C:\aaa\bbb.exe」の場合以下のようになります。
・GetModuleFileName:「C:\aaa\bbb.exe」(実行ファイル名まで取得)
・PathRemoveFileSpec:「C:\aaa」(実行ファイルが格納されているフォルダを取得)
// ヘッダーインクルード
#include <windows.h>
#include <stdio.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
// 実際の処理
int main()
{
TCHAR iniFileFolderPath[_MAX_PATH];
memset(iniFileFolderPath, NULL, _countof(iniFileFolderPath));
GetModuleFileName(NULL, iniFileFolderPath, _countof(iniFileFolderPath));
PathRemoveFileSpec(iniFileFolderPath);
}