Q&A

  • C 소스 변환중 걸리는 부분이 있어서용....(포인트 연산)
LPSTR pImgFrame;
LPSTR lpOutBuffer;
DWORD PKTCOUNT;
DWORD PKTSIZE;

for(PKTCOUNT=0; PKTCOUNT< 2 ; PKTCOUNT++)
{
중간 생략...
lpOutBuffer = (LPSTR)(m_pImgFrame + (PKTCOUNT* PKTSIZE));   <--- 애매한 부분
bResult = DeviceIoControl( Handle,IOCTL_BULK_READ,
                                      &tBulkCtl,
                                      sizeof(tBulkCtl),
                                      lpOutBuffer,
                                      PKTSIZE,
                                      &nByte,
                                      NULL);
중간 생략...
}

결론적으로 m_pImgFrame으로 값이 넘어오는 것인데요

  lpOutBuffer = (LPSTR)(m_pImgFrame + (PktCount * PKTSIZE));
이 부분을 단순히 바꾸면
  lpOutBuffer := PChar(m_pImgFrame + (PktCount * PKTSIZE));
  bResult = DeviceIoControl( Handle,IOCTL_BULK_READ,
                                     @tBulkCtl,
                                      sizeof(tBulkCtl),
                                      lpOutBuffer,
                                      PKTSIZE,
                                      nByte,
                                      NULL);

이렇게 하면 되는데 m_pImgFrame에 값이 넘어오지 않게 되자나요....

델파이에서는 어떻게 적절히 바꿔야 할지..난감 하네요.

pImgFrame 와 lpOutBuffer 를 Pointer 로만 선언하면 되는것인지....쩝....에궁.. 고수분들의 자문을 얻고자 합니다.
5  COMMENTS
  • Profile
    이중철 2003.05.07 12:07
    var
      pImgFrame, lpOutBuffer : pchar;
      PKTCOUNT, PKTSIZE : integer;
    begin
    .....
    lpOutBuffer := m_pImgFrame[PKTCOUNT* PKTSIZE];



  • Profile
    이강석 2003.05.07 18:57
    헉...
    괜히 미안하네...
    헛소리만 주저리 늘어놓았네요...
    이런 명쾌한 답변을 원하신건가보네요...
    쩌업...
    리필다신 분에게 고맙네요...
    ^^;

  • Profile
    이강석 2003.05.07 03:09
    먼저 안냐세요..
    전 잘 이해가 안갑니다..
    LPSTR, DWORD 이런것들은......
    C에서 쓰이는 자료형이 아닙니다..
    Winodows API자료형들이예요..
    따라서...굳이...형들을 바꾸어야 할 이유가 없군여...
    왜냐하면 지금 사용하시는 부분이 거의 다 오브젝트 파스칼 문법이 아니라..
    표준화된 API문법이기 떄문이죠....
    궁금한 거 있으면 다시 물어봐주시겠습니까?
    uses절에 보면 windows라는 유닛이 있는데..
    이게 API를 사용하기 위한 선언이라고 생각하시면 됩니다..
    API쪽은 겅부 안 하신분인가보네염..
    암튼 즐프하세염..

  • Profile
    mute 2003.05.07 08:18
    딱 자료형을 얘기한거가 아닙니당. ^^;;

    lpOutBuffer := m_pImgFrame

    lpOutBuffer = (LPSTR)(m_pImgFrame + (PktCount * PKTSIZE));
    이 부분을 단순히 바꾸면
      lpOutBuffer := PChar(m_pImgFrame + (PktCount * PKTSIZE));
    이렇게 되는데요...

    위에 코드를 보시면 For 문으로 루프를 돌면서
    m_pImgFrame의 번지값을 이동시키는 거자나요.. 그리고
    DeviceIoControl 에서  lpOutBuffer에 값을 쓰고요....

    그래서 결론은 포인터인  m_pImgFrame 으로 값이 넘어 오는거거든요...
    근데 걍 위에 처럼 바꾸면 m_pImgFrame에 값이 안들어오자나요....

    어떻게 처리 해야할지.....^^;;; 설명이 넘 난잡한게 아닌지......

  • Profile
    이강석 2003.05.07 18:48
    안녕하세요...
    제가 먼가 오해를 하고 있나보네요..
    실수했다면...이해하시고..
    제 생각을 말씀드리자면..
    첫째..이해를 못하겠네요..
    아래의 소스만 보면..
    m_pImgFrame변수로 포인터값이 넘어온다고 하셨는데..
    코드 어느 부분에 그 값으로 주소값이 넘어가는지 알 수가 없네요..
    단순히 코드를 보면..
    lpOutBuffer에...m_pImgFrame(이미지 관련된 부분인가?)주소에
    (packetcount*packetsize)-->이부분은 특정패킷 부분을 점프하려는 의도로 보이는 부분...실제 데이터를 가리키기 위한 것으로 추측...
    를....가리키게 하는거 같은데..
    저에게 보여주신 코드에는 대체 m_pImgFrame변수에 값을 넣는 부분이
    어디에 존재한다는 건지 모르겠습니다..
    혹시 생략부분에 생략을 하신건지....
    밑에 devicecontrol부분에서도 마찬가지인게...
    대체 어느 부분에서 값을 m_ImgFrame에 값을 넘겨주는지...
    가르쳐 주십시요..
    내가 C를 한지 좀되서....맛이 간건가...
    혹시 제가 틀린 소리를 했다고 해도 욕은 마세요....
    다 그런거니까....저도 사람이라 실수하거덩요..
    그럼 리필 부탁드립니다..
    수고하세요..