昨日から、ソフトVC++を始めた初心者です。
会社にINIファイルを読み込める機能を追加しろと言われ調べながら
C:WINDOWSの中にあるINIファイルを読み込み表示できたのですが、
.exeと同じフォルダのINIファイルの表示がうまくできません。
お手数ですが、ご教示ください。
開発環境
VisualStudio2008、VC++、WindowsXP
=====================================
test1.cpp
BOOL CxxxApp::InitInstance()
{
AfxEnableControlContainer();
//INIファイル読み込み先のPATH設定の開始//
/*自プログラムのフルパス名を取得する*/
char exeFullPath[512];
::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
char* pdest = strrchr(exeFullPath, 'g');
pdest[1] = '\0';
//文字列に変換
exepath.Format(%s,exeFullPath);
//領域の初期化
free((void*)m_pszProfileName);
//INIファイルのパスを設定
m_pszProfileName=_tcsdup(exepath);
int CEasyCommToolApp::ExitInstance()
{
return CWinApp::ExitInstance();
}
}
=====================================
test2.cpp
//INIファイル読み込みボタン
void Cyyy::OnButton_INI()
{
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
SetDlgItemInt(IDC_EDIT2,name);
}
=====================================
char* pdest = strrchr(exeFullPath, 'g');
ではなく
char* pdest = strrchr(exeFullPath, '\\');
でした。
失礼しました。
::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
で取得したモジュールパスを分解して、iniファイルのフルパス名を作成して、
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のファイル名に渡すだけ。
pszProfileNameを書き換える必要はない。
Blue様、maru様
早速のご回答ありがとうございます。
URLと指摘された事項を参照し、試みてみます。
たびたび失礼します。
ご指摘いただいた事を参考にtest1.cppを下記のように書き換え、
「カーソル行の前まで実行」でiniPathNameにカーソルを合わせると
iniファイルまでのパスがちゃんと表示されるのですが、うまくいきません。
あと、
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のファイル名に渡すだけ。
との事ですが渡すとはどのようにすればよいのでしょうか?
お手数ですが、ご教示ください。
=====================================
test1.cpp
/*自プログラムのフルパス名を取得する*/
TCHAR exeFullPath[512];
::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
//char* pdest = strrchr(exeFullPath, '\\');
//pdest[1] = '\0';
TCHAR iniPathName[_MAX_PATH];
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_splitpath(exeFullPath,drive,dir,fname,ext);
_tmakepath_s( iniPathName, _MAX_PATH, drive, dir, fname, _T(ini) );
//文字列に変換
//exepath.Format(%s,exeFullPath);
//領域の初期化
//free((void*)m_pszProfileName);
//INIファイルのパスを設定
//m_pszProfileName=_tcsdup(iniPathName);
=====================================
test2.cpp
//INIファイル読み込みボタン
void Ctest2::OnButton_INI()
{
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
SetDlgItemInt(IDC_EDIT2,name);
}
=====================================
とりあえず、
「GetPrivateProfileIntのヘルプを見ましたか?」
ヘルプをみれば、
> との事ですが渡すとはどのようにすればよいのでしょうか?
こんな質問出てこないはずです。
ここにも「ググるな危険」があるような。
maru様
自分なりにはGetPrivateProfileInt関数を調べて理解したつもりでしたが、
lpFileName には、iniファイル名を指定すると思っていたのですが、
指摘され再度隅々まで閲覧したところファイル名だけでなく、
作成したフルパスも指定できるのですね。
理解が浅かったです。。失礼しました。
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のxxx.iniをiniPathName にしたところ、無事解決しました。
ありがとうございました。