マンガでよめる痔のこと・薬のこと

Win32APIプログラムで困っています

僕は、C言語とともにWin32APIを勉強し始めたプログラム初心者です。
Visual Stdio 2008を使ってコンパイルと実行をしています。

今回自分でプログラムを作ろうと頑張っていたのですが、どうしても上手くいかないところがあるので、みなさんの力を借りたくて投稿しました。

初期化ファイルを使って設定を保存するというものなのですが、保存する際に以下のような関数を作りました。

#define SYSTEMFILE TEXT("system.ini")

TCHAR JapaneseSentenceKey[100][15] = {{TEXT("Japanese1")}, {TEXT("Japanese2")}, {TEXT("Japanese3")}, {TEXT("Japanese4")}, ~}}と100まであります。

TCHAR RomaSentenceKey[100][15] = {{TEXT("Roma1")}, {TEXT("Roma2")}, {TEXT("Roma3")}, {TEXT("Roma4")}, ~}}と100まであります。

void WriteSentence()//文のかきこみ
{
int i, number;
TCHAR szBufJapanese[200], szBufRoma[200], szBufFileName[20], szBuf[200];
GetWindowText(hChildWindow.hEditJapanese, szBufJapanese, 199);
GetWindowText(hChildWindow.hEditRoma, szBufRoma, 199);
GetWindowText(hMain, szBufFileName, 19);

for(i = 0; i < 100; i++){
GetPrivateProfileString(szBufFileName, JapaneseSentenceKey[i], TEXT("nothing"), szBuf, (DWORD)sizeof(szBuf), SYSTEMFILE);
if(szBuf == TEXT("nothing")){
number = i;
break;
}
}

WritePrivateProfileString(szBufFileName, JapaneseSentenceKey[number], szBufJapanese, SYSTEMFILE);
WritePrivateProfileString(szBufFileName, RomaSentenceKey[number], szBufRoma, SYSTEMFILE);

return;
}

このような関数です。

エディトコントロールから保存する文字列、タイトルからセクション名を取得します。

そして、for文の中でGetPrivateProfileString関数を使い初期化ファイルのキー名を調べ、そのキー名がないところでfor文のループを抜け出し、そのときのiの値をnumberに保存し、そのnumberの値のキー名のところにエディトコントロールから取得した文字列を保存するというものです。

想定としては、これでこの関数を呼び出すたびにデータのないところに保存されていく関数として作りました。

しかし、実際実行してみると、同じキーのところに何回も保存されていっこうに次のキーに保存しようとしてくれません・・・。
どうしてでしょうか・・??。

一生懸命考えたのですが、全くわかりません・・。
初期化ファイル自体に問題があるのでしょうか?

もしかしたら、単純ミスかもしれませんが、初心者ですので勘弁してください。

今回が質問初めてなので、色々と至らないところがありますが、何卒よろしくお願いします!!
長文失礼しました。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

if(szBuf == TEXT("nothing")){


が意図したとおりに動作しない原因のようですね。
szBuf の先頭アドレスと、文字列 TEXT("nothing") の先頭アドレスとの比較になっています。(当然、FALSE となります。)
_tcscmp() 等で比較を行いましょう。
    • good
    • 0
この回答へのお礼

おおおおおおお!!
できました!ありがとうございます!!

そう言われてみればアドレスの比較になってしまっていますね・・。
なんだか簡単なミスで恥ずかしいです。
これからはこういうこともしっかり考えてプログラムしていきたいと思います。

tsukasa-12rさん本当にありがとうございました!
これほど迅速に回答して頂けるとは感謝の念でいっぱいです。
これからもお世話になることがあるかもしれませんが、そのときはまたよろしくお願いします。

お礼日時:2010/04/03 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング