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の値のキー名のところにエディトコントロールから取得した文字列を保存するというものです。
想定としては、これでこの関数を呼び出すたびにデータのないところに保存されていく関数として作りました。
しかし、実際実行してみると、同じキーのところに何回も保存されていっこうに次のキーに保存しようとしてくれません・・・。
どうしてでしょうか・・??。
一生懸命考えたのですが、全くわかりません・・。
初期化ファイル自体に問題があるのでしょうか?
もしかしたら、単純ミスかもしれませんが、初心者ですので勘弁してください。
今回が質問初めてなので、色々と至らないところがありますが、何卒よろしくお願いします!!
長文失礼しました。
No.1ベストアンサー
- 回答日時:
if(szBuf == TEXT("nothing")){
が意図したとおりに動作しない原因のようですね。
szBuf の先頭アドレスと、文字列 TEXT("nothing") の先頭アドレスとの比較になっています。(当然、FALSE となります。)
_tcscmp() 等で比較を行いましょう。
おおおおおおお!!
できました!ありがとうございます!!
そう言われてみればアドレスの比較になってしまっていますね・・。
なんだか簡単なミスで恥ずかしいです。
これからはこういうこともしっかり考えてプログラムしていきたいと思います。
tsukasa-12rさん本当にありがとうございました!
これほど迅速に回答して頂けるとは感謝の念でいっぱいです。
これからもお世話になることがあるかもしれませんが、そのときはまたよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) VBAでのフルパスの取得 1 2022/09/20 22:51
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み取り専用ファイルを上書き...
-
Corel Digital Studioの動画をS...
-
Pivot table で集計されたデー...
-
【Excel VBA】自動的にバックア...
-
VBA メモ帳の上書き保存がしたい
-
VBAでPDF作成をしたあと、指定...
-
MPLABのソースファイルが保存で...
-
VB6.0でエクセル保存する時の保...
-
EclipseでJavaScriptファイルの...
-
VBAで、強制保存してブックを閉...
-
タイトルバーやメニューバーの...
-
Excel VBAでほかのアプリケーシ...
-
VBSでWordの文字色変え
-
htmlから取り込んだ を消...
-
コマンドプロンプトでデスクト...
-
IEのダウンロードファイル保存...
-
エクセル:マクロ:保存時に連...
-
Excel VBAで作成したマクロをxl...
-
vbaでIEの名前を付けて保存(A)...
-
onedriveで同期解除をしたら、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
読み取り専用ファイルを上書き...
-
Excel VBAでほかのアプリケーシ...
-
Corel Digital Studioの動画をS...
-
コマンドプロンプトでデスクト...
-
Excel VBAで作成したマクロをxl...
-
エクセルで「名前を付けて保存...
-
ExcelVBAでデスクトップのPATH...
-
VBA メモ帳の上書き保存がしたい
-
VBAで、強制保存してブックを閉...
-
irvineを利用してVBAからダウン...
-
VBScriptでのSaveAsについて
-
webページの特定の部分だけ消し...
-
VBScriptで日本語が変です
-
Pivot table で集計されたデー...
-
AccessVBAでレポートをPDFで出力
-
vbaでIEの名前を付けて保存(A)...
-
エクセル:マクロ:保存時に連...
-
ファイルのダウンロード保存先...
-
htmlから取り込んだ を消...
-
印刷と保存の仕方をVBAマクロの...
おすすめ情報