여기 고수님들 많은데...
저도 고수님들보면 어디서 저런것 알게되는지 궁금할때가 많습니다.
그리고 위에 답변드린 내용은 여기 볼포게시판에 다 있는 내용입니다.
..
2년전에 여기자유게시판에
커뮤니티를 이용한 나의 C++Builder공부 방법이라는 제목으로 글을 올린적이 있죠
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=13366
1. 강좌/문서 그리고 팁/트릭을 처음부터 다 읽어본다.
2. 새로 올라오는 Q/A를 모두 읽어본다.
3. Q/A게시판 질문에 가능하면 모두 답변을 달아주려한다.
4. 자료실에 올려진 다른사람의 프로그램을 살표본다.
5. 모르는 것은 질문한다.
6. 강좌나 팁/트릭을 직접 만들어본다.
예전에는 강좌는 별로 만들어 올리진 못했는데..
요즘은 직접 강좌를 많이 쓰려구 노력하구요.. 그러면서 많이 공부가 되는것 같습니다.
개인적으로 요즘 한계를 많이 느끼는것이 있는데..
영어랑
수학 그리고
시스템(os)에 대한 지식 등이 있습니다.
특히 영어.. 쩝쩝..
위 세가지가 개발자로서 크게 성장할수 있는 기본기가 아닐까 하는생각이 드네요
그럼..
김민호.소중한꿈 님이 쓰신 글 :
: 이런 많은 지식을 갖고 있는 것도 놀랍고, 또 이런 지식을 가지고 열심히 답변을 달아 주시는 것도 놀랍네요.
:
: 장성호님에게서는 C++ Builder 보다 공부하는 방법 자체를 좀 배우고 싶네요. 여하튼 좋은 정보 감사합니다. (--)(__)(--)
:
: 장성호 님이 쓰신 글 :
: :
[AccessViolation원인]
: : Design-time때 폼위에 컴포넌트나 컨트롤을 올려놓으면
: :
: : Form이 생성될때 자동으로 폼위의 모든 컴포넌트 객체가 생성됩니다.
: :
: : 하지만 직접 class를 설계하고 멤버변수로 TApdComPort 같은것을 두었을경우에는
: : 직접 new로 생성해줘야 합니다.
: :
: : 님의 코드르 보면 AccessViolation이 발생했는데....
: :
'Write of address' 부분을 보면
'00000078' 입니다.
: :
: : ComPort->AutoOpen = false 코드에서 0x00000078 번지에 write하려고 한것입니다.
: :
: : 이는 ComPort가 NULL( 또는 0 ) 인경우에 발생합니다.
: : TApdComPort 클래스 시작부분에서 부터 0x78 Byte위치에 AutoOpen 변수가 있기때문이죠
: :
: :
: : 즉 님의 경우
: : TBmmsThread::ComportCnt() 함수에서
: :
: : ComPort->AutoOpen 등에 접근하기 전에 ComPort가 생성되어있는지 확인하고
: : 객체를 생성해주시면 됩니다.
: :
: : void __fastcall TBmmsThread::ComportCnt()
: : {
: : //다음과 같이..
: : if(ComPort==NULL)
: : ComPort = new TApdComPort(NULL);
: :
: :
: : ComPort->AutoOpen = false;
: : //생략..
: :
: : }
: :
: : --------------------------------------------------------------------------------
: :
[코드에 다른 문제들]
: : 그리고 만약 TBmmsThread가 정말 쓰레드 클래스이구
: : TBmmsThread::ComportCnt() 가 메인쓰레드가 아닌 다른 쓰레드에서 호출한다면
: : TBmmsThread::ComportCnt() 함수에 몇가지 문제가 더 있습니다.
: :
: : 1. 첫째 쓰레드에서 Form1->BaudEdit->Text 나 Form1->ComportEdit->Text 등 GUI 객체의 변수에 직접 접근하셨습니다.
: : 크게 TEdit는 edit를 상속받은것으로 text에 내용을 가져오려면
: :
: : GetWindowText(Edit->Handle,...) 또는 SendMessage(Edit->Handle , WM_GETTEXT , ...) 로 동작합니다.
: : 메인쓰레드랑 동기되어서 동작하죠
: :
: : 뭐 큰문제는 아니지만 별로 바람직하지 않습니다.
: :
: :
: : 2. 둘째 ShowMessage를 호출하셨는데...
: : ShowMessage는 TForm을 상속받은 TMessageForm을 생성해서 ShowModal로 보여줍니다.
: : VCL의 Form이나 Control을 멀티쓰레드 환경에 맞춰 설계되어잇지 않기때문에
: :
: : ShowMessage할때 에러가 날수도 있구 , 화면이 이상하게 나올수도 있습니다.
: :
: : 쓰레드에서 ShowMessage쓰는것은 문제가 있습니다.
: :
: : 정쓰고 싶으면 MessageBoxA 라는 win32api를 쓰셔야 됩니다.
: :
: :
: : 그럼..
: :
: :
: : Kenzuro 님이 쓰신 글 :
: : : 쓰레드를 이용해서 시리얼 통신을 하는데요.. 쓰레드 사용하지 않고 컴포트로 시리얼 통신해서 정보 받는것은
: : : 성공을 했습니다. 하지만 쓰레드를 사용해서 컴포트를 연결 하려고 하니 첨부파일과 같은 에러가 생깁니다.
: : : 이것이 무엇에 대한 에러인지가 궁금합니다. APRO컴포넌트 사용해서 컴포트 만들었고요 폼에서 만들어서 하는게
: : : 아니라 스레드에서 제가 선언해주면서 만들고 있습니다 Dynamic하게(?)ㅋ
: : :
: : : 이게 뭐를 잘못해서 나온 에러인지좀 알려주세요