第13回目 Cocoa、Windowsで設定保存(文字列編)

NSUserDefaultsまたはCFPreference、レジストリでによる文字列の保存方法です。
下記はそれぞれについてのサンプルです。

NSUserDefaults

MacOSXのCocoaでNSUserDefaultsを使って文字列を設定保存する。

文字列を書き込む

#import <Cocoa/Cocoa.h>
char* string ="kuran_kuran"
NSString *nsstring = [NSString stringWithCString:string encoding:NSUTF8StringEncoding];
NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults];
[userdefaults setObject:nsstring forKey:@"name"];
[userdefaults synchronize];

文字列を読み出す

#import <Cocoa/Cocoa.h>
NSString *nsstring;
NSUserDefaults* userdefaults = [NSUserDefaults standardUserDefaults];
nsstring = [userdefaults stringForKey:@"name"];
char* string = [nsstring UTF8String];

CFPreference

MacOSXでCFPreferenceを使って文字列を設定保存する。

文字列を書き込む

#include <CoreFoundation/CFPreferences.h>
CFStringRef 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);
	}
}

文字列を読み出す

#include <CoreFoundation/CFPreferences.h>
CFStringRef application_name;
CFStringRef name_string;
CFStringRef string_string;
char name[100];
application_name = CFSTR("application_name"); // kCFPreferencesCurrentApplicationを設定するとデフォルトの名前が適用される
name_string = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingUTF8);
if(name_string)
{
	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);
	}
}

レジストリ

Windowsでレジストリに文字列を設定保存する。

文字列を書き込む

#include <tchar.h>
#include <windows.h>
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)
{
	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);
}

文字列を読み出す

#include <tchar.h>
#include <windows.h>
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("name"), NULL, &type, NULL, &size);
	if((result == ERROR_SUCCESS) && (type == REG_SZ) && (size <= 100))
	{
		RegQueryValueEx(handle, _T("name"), NULL, &type, reinterpret_cast<LPBYTE>(&name), &size);
	}
	RegCloseKey(handle);
}

前に戻る?


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