|
안녕하세요
답변글이 깔끔하게 잘 정리되어 있네요.
덕분에 이해하기 쉬웠고 문제 해결했습니다. 감사합니다.
열씸! 님이 쓰신 글 :
: 몇 가지 문제가 있군요.
:
: 0. TStrings 은 순수 가상 함수들로 이루어진 베이스 클래스입니다.
: 즉, 최소한 이런 이런 멤버들이 있다. 최소 사양만 적어 놓은거시지 실제 작동하는 기능이 있는
: 녀석이 아니란겁니다. TStrings 는 직접 생성하시면 안됩니다. 그걸 상속받아 구체적인 기능이
: 구현된 자식 클래스들을 이용해야 됩니다. 메모리 오류는 이것 때문에 생긴 문제일겁니다.
: 대표적으로 TStringList 를 사용하시면 되겠지요.
: 하지만 이번 경우엔 TStrings 씨리즈는 사용할 필요가 없겠습니다.
: 굳이 사용하는 예를 만들어 본다면
: TStringList *strList = new TStringList();
: Registry->GetValueNames(strList);
: (그러나 지금 필요하신건 ValueNames <Test란 이름을 알고 계시니까>가 아니고 ValueData 이십니다)
:
: 1. ValueNames 란 Key 내에 들어 있는 항목들의 이름들입니다.
: 즉, ValueNames 중 하나가 Test 였던거죠.
: 첨부하신 레지스트리 편집기의 스크린 샷에도 Test 가 "이름" (ValueName) 이라고 나와 있지요?
: 거기에 딸린 데이타를 읽고 싶으시면 그 데이타의 타잎에 따라 Read~~~ 하는 함수를 호출하셔야
: 하는데 GetDataInfo 같은 함수들을 사용해 데이타 타잎을 알아오시면 되지만,
: 이 경우엔 문자열인걸 알고 있다고 가정하고, 바로 ReadString 함수를 호출할 수 있습니다.
: AnsiString valueName = "Test";
: AnsiString valueData;
: valueData = Registry->ReadString(valueName);
:
: 2. 이렇게 하시면 AnsiString 형인 valueData 에 원하는 값이 들어 있을겁니다.
: 정리 하면 다음과 같습니다.
: TRegistry* Registry = new TRegistry();
: Registry->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\ABC", false);
: AnsiString valueName = "Test";
: AnsiString valueData;
: valueData = Registry->ReadString(valueName);
: ShowMessage(valueData); // 잘 들어 왔나 확인해 보시죠.
|