*第13回目 Cocoa、Windowsで設定保存(文字列編) [#zda681bb]
 NSUserDefaultsまたはCFPreference、レジストリでによる文字列の保存方法です。
 下記はそれぞれについてのサンプルです。
**NSUserDefaults [#q4b92b0e]
 MacOSXのCocoaでNSUserDefaultsを使って文字列を設定保存する。
***文字列を書き込む [#x7767856]
 #import <Cocoa/Cocoa.h>
 NSString *name = @"kuran_kuran";
 NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults];
 [userdefaults setObject:name forKey:@"name"];
 [userdefaults synchronize];
***文字列を読み出す [#a8fac4f7]
 #import <Cocoa/Cocoa.h>
 NSString *name;
 NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults];
 name = [userdefaults stringForKey:@"name"];
**CFPreference [#vf350ff1]
 MacOSXでCFPreferenceを使って文字列を設定保存する。
***文字列を書き込む [#re41ec33]
 #include <CoreFoundation/CFPreferences.h>
 CFStringRef application_name;
 CFNumberRef value;
 int score;
 application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される
 score = 125;
 value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &score);
 CFPreferencesSetAppValue(CFSTR("score"), value, application_name);
 CFRelease(value);
 CFPreferencesAppSynchronize(application_name);
 CFStringRef name_string;
 CFStringRef string_string;
 name_string = CFStringCreateWithCString(kCFAllocatorDefault, "name", kCFStringEncodingUTF8);
 if(name_string)
 {
 	string_string = CFStringCreateWithCString(kCFAllocatorDefault, "kuran_kuran", kCFStringEncodingUTF8);
 	if(string_string)
 	{
 		application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される
 		CFPreferencesSetAppValue(name_string, string_string, application_name);
 		CFPreferencesSetAppValue(CFSTR("score"), value, application_name);
 		CFRelease(name_string);
 		CFRelease(string_string);
 		CFPreferencesAppSynchronize(application_name);
 	}
 	else
 	{
 		CFRelease(name_string);
 	}
 }
***文字列を読み出す [#ba98384e]
 #include <CoreFoundation/CFPreferences.h>
 CFStringRef application_name;
 CFNumberRef value;
 int score;
 CFStringRef name_string;
 CFStringRef string_string;
 char name[100];
 application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される
 value = CFPreferencesCopyAppValue(CFSTR("score"), application_name);
 if(value)
 name_string = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingUTF8);
 if(name_string)
 {
 	CFNumberGetValue(value, kCFNumberIntType, &score);
 	CFRelease(value);
 	string_string = static_cast<CFStringRef>(CFPreferencesCopyAppValue(name_string, application_name));
 	if(string_string)
 	{
 		CFStringGetCString(string_string, name, static_cast<CFIndex>(100), kCFStringEncodingASCII);
 	}
 	else
 	{
 		CFRelease(name_string);
 	}
 }
**レジストリ [#ob58ee2d]
 Windowsでレジストリに文字列を設定保存する。
***文字列を書き込む [#v19da719]
 #include <tchar.h>
 #include <windows.h>
 int score;
 score = 125;
 HKEY handle;
 DWORD result;
 PCTSTR name = _T("kuran_kuran");
 result = RegCreateKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\REGISTRYTEST"), 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY | KEY_WRITE, NULL, &handle, NULL);
 if(result == ERROR_SUCCESS)
 {
 	RegSetValueEx(handle, _T("score"), 0, REG_DWORD, reinterpret_cast<CONST BYTE*>(&score), sizeof(DWORD));
 	DWORD length;
 #ifdef _UNICODE
 	length = static_cast<DWORD>(_tcsclen(name) * 2 + 2);
 #else
 	length = static_cast<DWORD>(strlen(name) + 1);
 #endif
 	RegSetValueEx(handle, _T("name"), 0, REG_SZ, reinterpret_cast<CONST BYTE*>(name), length);
 	RegCloseKey(handle);
 }
***文字列を読み出す [#i3671172]
 #include <tchar.h>
 #include <windows.h>
 int score;
 HKEY handle;
 DWORD result;
 TCHAR name[100];
 result = RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\REGISTRYTEST"), 0, KEY_READ, &handle);
 if(result == ERROR_SUCCESS)
 {
 	DWORD type;
 	DWORD size;
 	result = RegQueryValueEx(handle, _T("score"), NULL, &type, NULL, &size);
 	if((result == ERROR_SUCCESS) && (type == REG_DWORD))
 	result = RegQueryValueEx(handle, _T("name"), NULL, &type, NULL, &size);
 	if((result == ERROR_SUCCESS) && (type == REG_SZ) && (size <= 100))
 	{
 		RegQueryValueEx(handle, _T("score"), NULL, &type, reinterpret_cast<LPBYTE>(&score), &size);
 		RegQueryValueEx(handle, _T("name"), NULL, &type, reinterpret_cast<LPBYTE>(&name), &size);
 	}
 	RegCloseKey(handle);
 }

[[前に戻る>プログラミング]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS