毎度お世話になります。
今回質問させていただきたいことは、CLRにおいてのiniファイルの取得についてです。
[DB_INFO]
SERVER_NAME=2003R2
DB_NAME=aaa
ID=aaa
PASS=aaa
こういうiniファイルがあった時、SERVER_NAME=〜 DB_NAME=〜
とピンポイントにそれぞれの値を取得するにはどうすればいいのでしょうか?
どうぞよろしくお願い致します。
GetPrivateProfileString を調べてみてください
iniファイルの所在によっては
GetProfileString になります。
以上。参考まで・・・
オショウさんさっそくの回答ありがとうございます。
GetPrivateProfileStringについて、さっそく調べさせて頂きます。
ちなみに、iniファイルは実行するexeと同じ場所に置くという事です。
また分からないことがあったら質問すると思いますが、そのときは宜しくお願い致します。
> ちなみに、iniファイルは実行するexeと同じ場所に置くという事です。
その ini ファイルはインストール時に書いて実行中には書き換えないなら OK だけど
実行中に書き換えようとするなら Vista の UAC ではまるから注意。
要仕様変更だと思う。
tetrapodさんお世話になります。
>ini ファイルはインストール時に書いて実行中には書き換えないなら OK
はい、実行中は書き換えは行わないです。
GetPrivateProfileStringについて調べて見たのですが、c++/cli で扱うにはどうすればいいのでしょうか?
どこか参考になるサイトなどを知っていましたら、教えて頂けると助かります><
http://www13.ocn.ne.jp/~kancha/progmemo3.html#k3-4-1
ここなんか如何?
※ C++ CLIを選択した理由は?
以上。
オショウさんお世話になります。
>※ C++ CLIを選択した理由は
こういう仕様でつくるように言われているのです・・・・・・。
僕自身、C++ CLIは初めてで全くちんぷんかんぷんで・・・><
GetPrivateProfileStringを使うにあたって、そのままではつかえないですよね?なにかインクルードしないといけないのでしょうか?
http://msdn.microsoft.com/ja-jp/library/cc429779.aspx
ここの最下部に記載があります。
ちゃんとヘルプ読めば書いてありますヨ!
以上。
インクルードとかリンクするのが面倒なら.NETっぽくDllImportで書いてみるとか。
using namespace System;
using namespace System::Text;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;
[DllImport("kernel32.dll")]
UInt32 GetPrivateProfileString(String^ lpAppName, String^ lpKeyName, String^ lpDefault, StringBuilder^ lpReturnedString, UInt32 nSize, String^ lpFileName);
int main(array<System::String ^> ^args)
{
String^ path = Path::Combine(Path::GetDirectoryName(Assembly::GetEntryAssembly()->Location), L"test.ini");
StringBuilder^ sb = gcnew StringBuilder(1024);
UInt32 ret = GetPrivateProfileString(L"DB_INFO", L"SERVER_NAME", L"default", sb, sb->Capacity, path);
System::Console::WriteLine(sb->ToString());
return 0;
}
windows.hのインクードとkernel32.libをリンクする方法。
#include "windows.h"
#pragma comment(lib, "kernel32.lib") // オプションで指定可
#include "vcclr.h"
using namespace System;
using namespace System::IO;
using namespace System::Reflection;
int main(array<System::String ^> ^args)
{
String^ path = Path::Combine(Path::GetDirectoryName(Assembly::GetEntryAssembly()->Location), L"test.ini");
pin_ptr<const wchar_t> pin_path = PtrToStringChars(path);
wchar_t buff[1024];
DWORD ret = ::GetPrivateProfileStringW(L"DB_INFO", L"SERVER_NAME", L"default", buff, _countof(buff), pin_path);
System::Console::WriteLine(%String(buff));
return 0;
}
参考
過去ログの自分の発言より
>ついでに、Win32 API を使うには
>・#include <windows.h> を適当なところに記述する
>・プロジェクトのプロパティから
> リンカ→入力→追加の依存ファイル に適切な lib を追加する
> (基本的に「親またはプロジェクトの規定値からの継承」をチェックすればOK)
> ※ #pragam comment( lib, "〜〜〜.lib" ) でもOK
・#include <windows.h> を適当なところに記述する
は正しくは
#include "windows.h" ですね。
オショウさん、Blueさん毎度お世話になります。
>オショウさん
もう少し注意して読んでみます^^ありがとうございました。
>Blueさん
具体的な例をあげていただいて本当にありがとうございます。こういう書き方もあるのですね〜。
お教えいただいた事を参考に実現できそうです^^
本当にありがとうございました^^
ツイート | ![]() |