C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74652] Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ
입문자 [tlarnsdlekt] 3522 읽음    2017-11-14 17:09
먼저 답변 달아주신점 무한히 감사드립니다..

////////////////////////////////////////////////////////////////////
Send 함수 내부 구조
bool CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len)
{
    if(g_bTempRunComm)
    {
        if(WaitComm()==false)
        {
            return false;
        }
    }
    g_bTempRunComm = true;

    EnterCriticalSection(&m_csTemp);

    g_bTempNewMsg  = false;

    int ret = sio_write(PortNo, (char*)Msg, len);

    LeaveCriticalSection(&m_csTemp);

    if (ret < 0)  { g_bTempRunComm = false; return false;}

//    if(WaitReturn()==false)
//        return false;

    g_bTempRunComm = false;
    return true;
}
////////////////////////////////////////////////////////////////////
위에 처럼 바로 전송하게 되어있습니다.
Pcomm 라이브러리 사용중에 있구요.


디버그 인스펙터 이용해서 함수 값이 어떻게 들어있는지 캡쳐해서 파일을 올렸습니다.
흑....



정성훈.해미 님이 쓰신 글 :
: 문자열 처리에서는  0x00이 들어가면 거기가 문자열 끝이로 인식하여
: 이후 데이터는 안나옵니다만
:
: char 배열에 그냥 값을 넣는 것은 무관한 부분입니다.
:
: 제가 보기엔 msg에 값이 안들어가는게 아니고
: msg 배열에 들어간 데이터를 전송하는
: Send 함수 내부가 잘못 코딩 되었을 가능성이 큽니다.
:
: Send 함수 인자 받는 형태로 봐서는
: 원하는 데이터가 잘 나가야 정상입니다.
:
: DWORD len 인자가 있다는 것은
: 함수 내부가 문자열 처리가 아니고
:
: 길이만큼 데이터를 강제로
: 보내는 방식으로 되어 있는게 맞으니까요.
:
: CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len) 함수 내부에서
: 시리얼 함수를 호출하는 부분이 잘못 되었을 것입니다.
:
: 보통 시리얼 전송 함수는 문자열 인자만 받아서 보내는 함수와
: (예,     PutString(const AnsiString S) )
: 데이터 포인터와 길이를 받아서 보내는 함수가 존재합니다.
: (예,     PutBlock(const void *Block, Word Len) )
:
: Send 함수 내부에서
: BYTE *Msg, DWORD len 를 그대로 시리얼 함수중에 같은 형태로 된 함수를
: 이용하여 보내면 될 것입니다.
:
:
:
:
:
: 입문자 님이 쓰신 글 :
: :



: :
: : 안녕하세요. 수고가 많으십니다.
: :
: : 다름이 아니라..
: :
: : 시스템.
: : Windows XP
: : C++ Builder 6.0
: :
: : ///소스 코드...
: :     char msg[32], msg1[32];
: :     DWORD dwIndex = 0;
: :     AnsiString szData;
: :
: :     ZeroMemory(msg, 32);
: :     //국번..
: :     msg[dwIndex++] = wChNo;
: :
: :     //명령어 코드..
: :     msg[dwIndex++] = wCodeNo;
: :
: :     //설정값 주소지..
: :     wData.wData = wAddr;
: :     msg[dwIndex++] = wData.byData[1];
: :     msg[dwIndex++] = wData.byData[0];
: :
: :     //데이터 갯수..
: :     msg[dwIndex++] = 0x00;
: :     msg[dwIndex++] = 0x01;
: :
: :     //Check Sum CRC16..
: :     wData.wData = GetCheckSum_CRC16(msg, dwIndex);
: :     msg[dwIndex++] = wData.byData[0];
: :     msg[dwIndex++] = wData.byData[1];
: :
: : 이부분이 중요...!
: :     Send(m_nPortNum, msg, ++dwIndex);
: :
: : 함수 원형..
: : bool CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len)
: :
: : msg : "0x01 0x04 0x03 0xE8 0x00 0x01 0xB1 0xBA" <--요걸 그대로 복사하고 싶습니다...
: :
: : 문제는 중간에 " msg[dwIndex++] = 0x00; " 이값이 꼭 들어가야 하는데..
: :
: : 값이 포인터 변수로 복사 될때에 0x00 앞의 값(msg : "0x01 0x04 0x03 0xE8")만 전달이 됩니다...ㅜ
: :
: : 이 값을 전체적으로 전달 할수 있는 방법 없을까요 ?
: : 문자열 복사를 해도 0x00 값 앞의 값만 복사가 됩니다...크흑..
: :
: : 도와주십쇼~~~
: :
: :

+ -

관련 글 리스트
74650 시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 3571 2017/11/14
74651     Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 4022 2017/11/14
74652         Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 3522 2017/11/14
74655             Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 3496 2017/11/14
74653             (추가) Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 3649 2017/11/14
74656                 감사합니다. 입문자 3318 2017/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.