• ベストアンサー

GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・

お世話になっています。 iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。 このサイトの投稿や、MSDNなどにも載っていたのですが、 少し理解に苦しみます。 現在まで、理解した点がwindows.hのインクルードを 記述するところ辺りです。 iniファイルは下記のようなレイアウトです。 ---<mst.ini>---------------------------- [user] name=username ID=userid [pc] pcname=FMV ---------------------------------------- #include<windows.h>は記述することまでは 分かりましたが、以下から進みません。。。 GetPrivateProfileString("") 初心者で申し訳ありませんが、お助け願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 サンプルを載せておきます。 mst.iniファイル内の[user]セクションのnameキーの値を取得する。 DWORD dwLen=0; char strBuf[100]; dwLen = GetPrivateProfileString("user",       // セクション名                 "name",       // キー名                 "soushi_ni",     // デフォルト値                 strBuf,       // 読み込んだ値を格納するエリア                 sizeof(strBuf),   // 上記のエリアのサイズ                 "mst.ini" );     // iniファイル名 解説: iniファイル名をフルパスで指定しないとWindowsのディレクトリにあるものと判断されます。 Win9xなら「c:\windows」、WinNT系なら「c:\WinNT」。 [user]セクションのnameキーがないときは、デフォルト値で指定した値が設定させます。 復帰値「dwLen」は実際に設定した値(文字列)の長さが返されます。

soushi_ni
質問者

お礼

ありがとうございました。 コンパイルしたところ、問題なく出来ました。 あとは、自力でがんばります。 助かりました。

その他の回答 (1)

  • kazubon-X
  • ベストアンサー率25% (5/20)
回答No.1

DWORD GetPrivateProfileString( LPCTSTR lpAppName, // []で囲まれたセクション名 例:"user"又は"pc" LPCTSTR lpKeyName, // keyの名前 例:"name" 又は"ID"又は "pcname"等 LPCTSTR lpDefault, // 上記のセクションやキーが無かった時にlpReturnedStringに返ってくる値 LPTSTR lpReturnedString, // 結果、この関数を呼び出した後に値が入っている 例:"username" 又は "userid" 又は "FMV"等 DWORD nSize, // lpReturnedStringの領域の大きさ(バイト数) LPCTSTR lpFileName // INIファイルの名前(フルパスでも入ります) ); 分からなかったら補足しますが・・・・

soushi_ni
質問者

お礼

ありがとうございました。 何とかできました。 がんばります

soushi_ni
質問者

補足

早速のお返事有難うございます。 DWORD GetPrivateProfileString("user","name",Default,Ret,255,"c:\mst.ini"); このような感じでしょうか?それで補足なのですが、"DWORD"とはなんでしょうか? お手数ですが、現在お返事を書いている場所が環境が無くて動かせない状態なので・・・ 宜しくお願いします。

関連するQ&A

  • INIファイルの読み書きをするには?

    お世話になります。WindowsXP/Cで開発している初心者です。 開発はwindowsでしておりますが、最終的にはlinuxで動作させます。 質問させていただきたい件ですが INIファイルの読み込み、書き込みをするには、どういった方法(関数?)がありますでしょうか。 ネットで調べておりますが、見つけられずにいます。 windows.hをインクルードし、おなじみのGetPrivateProfileStringを実行すると windows上ではコンパイルが通りますが、linuxではヘッダーファイルが存在しないと エラーが出ます。(当たり前だと思いますが) ご存知の方、いらっしゃいましたら、ご指導願います。 宜しくお願い致します。

  • iniファイルについて

    パソコンを立ち上げる度に下記の表示が出現します。 【検索コントロールの初期化に失敗しました。 iniファイルがありません。】 (パソコンはウインドウズ7の32ビットです) 最近あまり身に覚えのないプログラムファイルを色々と削除したのですがその中に必要なファイルがあったのかもしれません。 iniファイルが存在しないと、どの様な不便があるのかすら分らない素人です。 またiniファイルを取得する方法も分りません。 どうか上記記述の影響と表示が出なくするにはどうしたら良いのか、パソコンに無知な私にも理解出 来るよう教えて頂きたく宜しくお願い申し上げます。

  • iniファイルで前に設定した値を利用したい

    例えば、iniファイルの中で a = "2" という設定が最初にあったときに次の行のbは a = "2" b = a という風にaに設定した値2をbに代入したいのですが 上のような記述だとbの内容は文字列aになってしまいます・・・ このようなプログラムでいう変数の値を代入するみたいなことは iniファイルではできるのでしょうか?

  • 【VB2005】txtファイルからINIファイルみたいに読込む

    googleや、ITプロのサイトなどで VB2005のINIファイルもしくはXmlの読書きが理解できずに、 とりあえず、txtファイルから設定の読込みをしたいと考えてます。 ↓Text.txt↓の内容 [Mode] Mode=1 [SYSTEM] Menu1=登録処理 Menu2=保存処理 ・各、=(イコール)のあとの値を変数に代入したいと思ってます。  状況と、したいことが伝わりにくいかも知れませんが  ご口授お願いします。

  • C#でiniファイルの書き込みがうまくいきません。

    C#初心者です。今回INIファイルを生成→書き込みを行うためのソースコードを書いたのですが、空ファイルの生成はうまくいくのにINIファイルへの書き込みがうまくいかず、空ファイルのままになってしまいます。なぜでしょうか? 以下ソースコード using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; namespace Loei_Server_ { /* ネットで公開されていたINIファイルに関するクラス。 難しいことは考えちゃアカン。 */ class IniFileHandler { [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")] public static extern uint GetPrivateProfileStringByByteArray(string lpAppName, string lpKeyName, string lpDefault, byte[] lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName); } class Program { static void Main(string[] args) { /* 日付を取得。 */ DateTime this_time = DateTime.Now; /* 多重起動するとマズイので多重起動していたら強制的に終了する。*/ if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1) { Console.WriteLine(" [Error] " + "[" + this_time.ToString() + "] Application already has started. This program is on the nature, you can not multi-boot."); return; } /* コンフィグデータの確認。なかったら勝手に生成する。 */ if (!File.Exists("Config.ini")) { Console.WriteLine(" [Warning] " + "[" + this_time.ToString() + "] Config.ini file could not be found. I created you."); /* 空のINIファイルを生成。 */ StreamWriter writer = new StreamWriter("Config.ini", true); /* 生成したINIファイルにいろいろ書き込む。 */ IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_IP", "localhost", "Config.ini"); IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_HOST", "25565", "Config.ini"); Console.WriteLine(" [Info] " + "[" + this_time.ToString() + "] It has generated an Config.ini file!"); }

  • C++ WinAPIの使い方について

    WindowsAPIの GetPrivateProfileString を使用していますが、下記のエラーが出てしまいます。 error C3861: 'GetPrivateProfileString': 識別子が見つかりませんでした ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード インポートライブラリ:Kernel32.lib を使用 以上2点が問題だとは思うのですが、インクルード以外のやり方が分かりません。 コードは以下です。 char buf[256]; GetPrivateProfileString("COMMON","ZIPPATH","localhost",buf,sizeof(buf),"C:\tool.ini"); 御存じの方がいれば、ご教授いただけると幸いです。 よろしくお願いします。

  • boot.iniが見つからない・・・

    パソコンを起動する際に 「次のファイルが存在しないかまたは壊れているため、windows2000を起動できませんでした。 <windows2000root>\system32\ntoskrnl.exe 上記のファイルをインストールし直してください。」 というメッセージがでて起動できなくなりました。調べてみるとboot.ini」の記述がおかしくなっていることが原因らしいとわかりSETUPディスクで 回復コンソールを開き attrib -r-h-s c:\boot.ini を入力したのですが  指定されたファイルまたはディレクトリが見つかりません。というメッセージがでました。何回やってもメッセージは同じで打ち間違えいでもないみたいです。これはboot.iniの記述がおかしくなっているのではなく本当にntoskrnl.exeが壊れてしまったのでしょうか? これ以上は調べても解決方法は分からなかったのでこの場を借りて質問させていただきました。 どなたか分かる方おられましたら回答にご協力願います。

  • 【VBS】 iniファイルの特定部分のみ変更

    特定フォルダにある、iniファイルを変更したいと思っています。 テキストファイルで変更するなら、 TestDateA=1 ↓ TestDateA=5 と変更するのは 1行ずつ読み込み、Replaceで出来ると思うのですが iniファイルとなると特別なのか、調べてみても良く分かりません。 h ttp://yozda.exblog.jp/9552062/ この方が書いている通り、書けば良いのかもしれませんが 自分で理解していない分、このまま使うのは不安です。 クラスを使うとなると余計にわかりません・・・。 ReadLineで読み込み、特定の文字を含んだらReplaceみたいな 方法は使えないでしょうか? それ以外に何か方法はありますでしょうか? 以上、よろしくお願い致します。

  • GetPrivateProfileStringAについて

    お世話になります。 VC++2003で作成したGetPrivateProfileStringを使ったプログラム参考にしてVC++2005でINIファイルを読み込むプログラムを作成したのですが、うまく読み込めないため、色々と調べた結果、GetPrivateProfileStringはUNICODE形式で、GetPrivateProfileStringAがANSI形式と記載していたHPを参考にGetPrivateProfileStringAを使用したところ、うまく読み込めました。 ただ、MSDNでGetPrivateProfileStringAを探しても見つからなかったので、このままGetPrivateProfileStringAを使用して良いのか迷っています。GetPrivateProfileStringAはどのような位置付けなのでしょうか?レガシーなAPIで使用はできるが現状ではサポートされていないのでしょうか? ご存知の方がいらっしゃいましたら、御教授願います。

  • 実行ファイルにDLLファイルを同梱したいです。

    http://kidd0320.hatenablog.com/entry/2014/06/06/142355 EXEにDLLファイルを同梱するためこちらのサイトを参考にしたのですが、ソフトを別のパソコンに入れたところ”MSVCP120.dllがないため、プログラムを開始できません。” と表示されてしまいます。 開発環境はC++でOPENCVを使っています。 開発ソフトはMicrosoft Visual Studio Express 2013 for Windows Desktopを使っています。 構成はReleaseでプラットフォームはwin32です。 インクルードファイルなどは以下のとおりです。 #include "stdafx.h" #include <stdio.h> #include <windows.h> #define snprintf _snprintf #include <opencv/highgui.h> #include <iostream> #include<fstream> using namespace std; どういった原因が考えられるでしょうか。 どなたかご教授いただけないでしょうか。