Q&A

  • 초보의 비애......
TTestRecord  = packed record
    Data1 : array [0..29] of char;
    Data2 : array [0..29] of char;
    Data3 : array [0..29] of char;
end;

var Buf : array [0..29] of char;
      TestRecord : TestRecord;

이렇게 되어 있었을 때

CopyMemory(@(TestRecord.Data2), @Buf, 10);

이런 방법 말고

CopyMemory(@TestREcord + 10, @Buf, 10);

이와 같이 하고 싶습니다. 질문의 요지는 최초 메모리 주소에서 10만큼 떨어진곳의 메모리 주소를

억세스할 때 어떻게 해야하는지 잘 몰라서 질문을 드립니다..
3  COMMENTS
  • Profile
    남충희 2005.06.12 05:11
    원하시는 답은 아닐것 같은데... 그래도

      System.Move(TestRecord.Data1[10], Buf, 15);
      System.Move(PByteArray(@TestRecord)^[10], Buf, 15);


    이런식으로 테스트를 한번 해보세요......


  • Profile
    하얀까마귀 2005.06.12 22:43
    안녕하세요 하얀까마귀 입니다.

    델파이에서는 빈번한 포인터 에러를 방지하기 위해서 직접적인 포인터 연산을 가급적 피하도록 되어있습니다.

    따라서 ..  이렇게 해야 합니다.
      Pointer(Integer(@TestRecord.Data2)+10)
      
    포인터를 정수로 형변환후 10을 더하고  해당값을 다시 포인터로 바꿔줘야 합니다.

    그럼..

  • Profile
    천희택 2005.06.13 05:31