흠.. 소스가 좀 부족하게 올라 와서 그랬나요.....
아래 소스를 보시면..
slValue : TStringList ;
procedure TForm1.btn1Click(Sender: TObject);
var
nListCnt : Integer ;
szFileName , szTmp : string ;
begin
if LocalOpen.Execute then
begin
for nListCnt := 0 to LocalOpen.Files.Count - 1 do
begin
szFileName := LocalOpen.Files.Strings[ nListCnt ] ;
szTmp := GetNameHash( szFileName ) ;
slValue.AddObject( szFileName , TObject( szTmp ) ) ;
end ;
end ;
end;
procedure TForm1.btn2Click(Sender: TObject);
var
nListCnt : Integer ;
szTmp : String ;
begin
for nListCnt := 0 to slValue.Count - 1 do
begin
//mmo1.Lines.Add( string( slValue.Objects[ nListCnt ] ) ) ; --> Out of memory
//szTmp := string( slValue.Objects[ nListCnt ] ) ; --> Invalid pointer operation
//ShowMessage( string( slValue.Objects[ nListCnt ] ) ) ; --> 아무 이상없음
end ;
end ;
이상이 테스트 코드의 전부 입니다.
>안녕하세요.
>
>왜 그런지 모르겠는데요.
>
>아래 코드에서 오브젝트 값을 메모장 이나 변수에 넣으려고 하면 예외가 생기네요..
>헌데... 메시지 박스로 뿌리면 예외 없이 잘 되어 지구요..
>흠....
>무슨 차이 일까요?
>
>procedure TForm1.btn2Click(Sender: TObject);
>var
> nListCnt : Integer ;
> szTmp : String ;
>begin
> for nListCnt := 0 to slValue.Count - 1 do
> begin
> //mmo1.Lines.Add( string( slValue.Objects[ nListCnt ] ) ) ; --> Out of memory
> //szTmp := string( slValue.Objects[ nListCnt ] ) ; --> Invalid pointer operation
> //ShowMessage( string( slValue.Objects[ nListCnt ] ) ) ; --> 아무 이상없음
> end ;
>
>end;
>
>날이 많이 쌀쌀해 졌네요.
>
>다들 감기 조심하세요.
>
PChar 로 치환하시면 될거예요..
이를테면..
mmo1.Lines.Add( PChar( slValue.Objects[ nListCnt ] ) ) ;
그럼..즐거운 프로그래밍 하시구요~