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
[74653] (추가) Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ
정성훈.해미 [sage5nor] 3649 읽음    2017-11-14 17:14
Send 함수 호출 전에 있는

szData.sprintf("%s", msg);
부분을 주석 처리 해보세요.

printf문이 msg원형을 변형하는 경우도 있습니다.

그리고 디버그 인스펙터에는 짤린것처럼 보여도
실제로는 그렇지 않습니다.

디버그 인스펙터가 문자열로 인식하여
거기까지만 자동으로 보여주니까 그렇습니다.

Send 함수 내에서 인자로 넘어온 배열을 개수만큼 찍어보면
재대로 다 들어가 있을 겁니다.

입문자 님이 쓰신 글 :
:  먼저 답변 달아주신점 무한히 감사드립니다..
:
: ////////////////////////////////////////////////////////////////////
: 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 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 3523 2017/11/14
74655             Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 3497 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.