밑에가 코딩이거든여... 그런데 한군데에서 에러가 나여... 왜그럴까엽....
참고로.. PChar는 쓸수가 없다고 합니다....
이유는 묻지마세여~~~
코딩에다가 에러나는부분을 적아 놨습니다.
type
pstAuthUser = ^stAuthUser;
stAuthUser = Record
user : array[0..19] of Char;
Addr : Address;
password : array[0..127] of Char;
end;
Address = Record
ttype : Char; // 1=IP Address, 2=Host Name, 3=E-Mail, 4=Group Name
name : array[0..19] of Char;
end;
implementation
procedure TFormSecureLog.bbConfirmClick(Sender: TObject);
var cstAuthUser : pstAuthUser;
begin
StrPCopy(cstAuthUser^.user, edUserID.Text);
StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여
밑에 에러메시지가 적혀 있습니다.
StrPCopy(cstAuthUser^.Addr.name, '211.43.170.91');
StrPCopy(cstAuthUser^.password, edPasswd.Text);
end;
******errer message *************
[Error] SecureLog.pas(125): Incompatible types: 'Char' and 'PChar'
흠.. 코드를 봤는데..여...ㅠㅠ
쩌비.. 포인터를 함부로 쓰면 안되여..ㅠㅠ
아님, 어플의 메모리 구조와 메모리 함수를 완전히 알든가여..ㅠㅠ
C 코드를 델파이로 포팅하시는 건가여?
결론부터 말하면, C 코드의 포인터두 델파이 포인터루 포팅이 됩니다..
StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여
이게 에러가 나는건 당연합니다.. --
StrPCopy 함수는 스트링을 카피합니다..
따라서 널종료 문자열을 첫번째 파라미터로 받은 포인터로 카피하져..
'1' 은 실제 1 과 nil 2 바이틉니다..
근데 cstAuthUser^.Addr.ttype 는 Char 1 바이틉니다..
델파이에선 컴파일러가 포인터 연산시 메모리 비교를 해줍니다..
따라서 1바이트의 메모리에 2바이트를 카피하려고 시도하니까, 에러를 발생시키져..
해결방법은 CopyMemory() 함수로 1바이트를 카피하거나..
cstAuthUser^.Addr.ttype 를 2바이트 이상으로 잡으면 되겠져?
즐푸하세여..^^
타락천사...