Q&A

  • delphi에서 C의 memcpy와 비슷한 기능은 없나요?
안녕하세요.



senddata :string;

tpSendBuff Pointer;



strcopy(tpSendBuff, Pchar(senddata));



여기에서 senddata안에는 일반string값과 binary값이 공존합니다.

즉, null값이 중간에 끼어 있거든요.

위와 같이 strcopy를 했더니 senddata의 최초 null을 만난 이후로의 값은

tpSendBuff로 옮겨 지지가 않더군요.

PChar가 null terminated String pointer여서 그런 거 같습니다.



C 에서는 string안에 null값이 있더라도

memcpy( (char *)destbuff, (char *)srcebuff, 1024);

요렇게 하면 srcebuff의 1024byte가 destbuff가 가리키는 곳으로

그냥 들어가거든요.



delphi에서는 이렇게 할 수 없나요.

그러니까 binary 가 포함된 data를 pointer로 옮기는 방법이 궁금합니다.

winapi를 사용해서라도 된다면 좀 알려주십시오.



그럼, 연락기다리겠습니다.



3  COMMENTS
  • Profile
    pluskim 2001.11.17 01:37
    양홍석 wrote:

    > 안녕하세요.

    >

    > senddata :string;

    > tpSendBuff Pointer;

    >

    > strcopy(tpSendBuff, Pchar(senddata));

    >

    > 여기에서 senddata안에는 일반string값과 binary값이 공존합니다.

    > 즉, null값이 중간에 끼어 있거든요.

    > 위와 같이 strcopy를 했더니 senddata의 최초 null을 만난 이후로의 값은

    > tpSendBuff로 옮겨 지지가 않더군요.

    > PChar가 null terminated String pointer여서 그런 거 같습니다.

    >

    > C 에서는 string안에 null값이 있더라도

    > memcpy( (char *)destbuff, (char *)srcebuff, 1024);

    > 요렇게 하면 srcebuff의 1024byte가 destbuff가 가리키는 곳으로

    > 그냥 들어가거든요.

    >

    > delphi에서는 이렇게 할 수 없나요.

    > 그러니까 binary 가 포함된 data를 pointer로 옮기는 방법이 궁금합니다.

    > winapi를 사용해서라도 된다면 좀 알려주십시오.

    >

    > 그럼, 연락기다리겠습니다.

    >

    copymemory를 사용하시면 됩니다.

    copymemory의 인수사용도 memcpy와 같습니다.

  • Profile
    허접 2001.11.17 00:31
    api함수중에 CopyMemory라는 함수를 한번 사용해보세요

    아마 원하는 결과를 얻을 수 있을 겁니다.

    VOID CopyMemory (



    PVOID Destination, // address of copy destination

    CONST VOID *Source, // address of block to copy

    DWORD Length // size, in bytes, of block to copy

    );

    예)

    CopyMemory(P_Didata(문제의포인터),Diptr(배열),128);

  • Profile
    이경문 2001.11.17 04:26
    StrMove라는 명령어도 있답니다. ^^



    허접 wrote:

    > api함수중에 CopyMemory라는 함수를 한번 사용해보세요

    > 아마 원하는 결과를 얻을 수 있을 겁니다.

    > VOID CopyMemory (

    >

    > PVOID Destination, // address of copy destination

    > CONST VOID *Source, // address of block to copy

    > DWORD Length // size, in bytes, of block to copy

    > );

    > 예)

    > CopyMemory(P_Didata(문제의포인터),Diptr(배열),128);