|
몇 가지 문제가 있군요.
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); // 잘 들어 왔나 확인해 보시죠.
|