안녕하세요?
정말 초짜여서 그러는데요
c문법에 맞게 되있는 소스를 델파이로 포팅하는 중인데요
아무리 해도 어떻게 고쳐야 맞는건지
몇개 나름대로 빼고 보면 왠지 실행이 재대로 않되고 해서
이렇게 질문을 하게 되었습니다..
다음과 같은 c문법을 어떻게 델파이 문법으로 맞게 변환할수 있을까요?
1. memset(pblobCat->lpb, 0, nSize);
-> memser과 같은역활을 하는게 무엇인지요?
2.
for i := 0 to arrIndex do
pblobCat.lpb[pCArray[i].iIndex] := pblobCat.lpb[pCArray[i].iIndex] + pCArray[i].bValue;
-> lpb는 byte pointer형이구여 bValue는 byte형이거든요
결과적으론 lpb의 특정 내용과 bValue의 값들을 더하고 싶은건데요..
lpb는 record 형식이고 bValue는 배열형식이고 데이터형 까지 다르니
잘 안되서여..
암튼...
1. memset
ZeroMemory, FillChar가 있습니다.
개인적으로는 Win32에도 있는 ZeroMemory 를 좋아하지만,
ZeroMemory는 Win32 꺼 부르는 것이 아니라 FillChar 부르는 래펍니다.
카일릭스 쓰시믄, 거긴 memset 있습니다. uses Libc 하구 나면 사용 되죠..
2. 포인터
걍.. 제가 예제로 레코드 만들어서 말쌈드리죠...
RFirst = packed record
recFirst :packed record
dwData :DWORD;
cByte :Byte;
end;
otherData :integer;
end;
RSecond = packed record
arByte :array [0..99] of Byte;
otherData :Integer;
end;
var
r1 :RFirst;
r2 :RSecond;
begin
// r1, r2에 필요한 데이터들 집어 넣고...
// r1.recFirst.dwData의 3번째 바이트의 값을
// r2.arByte[3] 에 넣기.
r2.arByte[3] := PByte( Integer(@r1.recFirst.dwData) + 2 )^ ;
// r1.recFirst.dwData의 4바이트 값을
// r2.arByte[10] ~ r2.arByte[13]까지 넣기
PDWord( @r2.arByte[10] )^ := r1.recFirst.dwData;
end;
델파이에서 포인터 연산은 거의 C++ 만큼 할 수 있죠...
단 Pointer로 알려진 것에 대한 연산을 하려면 적절하게 타입 케스팅을 해주어야 한다는 겁니다.
포인터 덧셈/뺄셈 은 Integer 혹은 Cardinal로 변환해서 하믄 직빵(?) 입니다.
주의 하실 것은 이렇게 연산 하고 난 다음에는 다시 원하는 형태의 포인터로 타입케스팅을 해서 값을 조절해야 한다는 것이죠...
오늘도 즐입다.