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
[74656] 감사합니다.
입문자 [tlarnsdlekt] 785 읽음    2017-11-14 17:50

감사합니다.

디버그 인스펙터가 널값까지만 표시를 해주네요...ㅜ,.ㅠ

실제 데이터를 보냈을 시 데이터는 수량만큼 보내기 때문에

정상적으로 다 이동은 했더군요...

크흑...정상적인 경우를 고민했네요..

귀한 시간 내주시어 답변해주셔서

정말 감사합니다.



정성훈.해미 님이 쓰신 글 :
: 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 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 879 2017/11/14
74651     Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 902 2017/11/14
74652         Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 817 2017/11/14
74655             Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 828 2017/11/14
74653             (추가) Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 959 2017/11/14
74656                 감사합니다. 입문자 785 2017/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.