|
안녕하세요? 개박살입니다.
답변이 없길래 제가 아는 범위만 말씀드리겠습니다 ^^;
1. 첫번째 컴파일 Warning은 확실한 원인을 모르겠군요 아마 빌더에서 속도를 위해 헤더를 미리 컴파일하는 부분이 동작한하는거 같은데 이건 상관없을꺼 같군요 어짜피 Warnning 이니 신경쓰지 마시고... (찾아보니 Pre-compile헤더를 찾아서 지우면 된다는 소문이 ^^; )
2. 말씀하신 Save, Load기능은 소스를 보니까 컴포트설정에대한 저장과 로드기능이군요 이건 Registry를 이용하는 함수들에서 Exception이 나는 걸로 보아.. 흠.. 혹시 윈2000을 사용하십니까? 윈2000에서는 R/W 에러가 날쑤도.. LoadSettings/StoreSettings 함수의 소스가 있다면 Resistry쪽 함수를 공부하셔서 고쳐보심이... Exception처리를 해주시면 적어도 에러는 막을수 있을껍니다.
3. ShowSetupDialog은 저도 사용을 안해봐서 모르지만, 윈도우장치관리자에서 COM1밖에 설치되어있지 않는거 아닙니까? 보통 COM쪽은 장치관리자에서 얻어올수도.. 마찬가지로 소스가 있다면 다이얼로그를 직접 수정하세요 강제로 COM1, COM2..를 추가할수도 있겠죠
4. ComPort->Open, Close() 함수는 컴포트를 열어라, 닫아라 하는거죠.. --;
Button_Open->Caption = "Open" 는 버튼을 하나만 두고 열기 닫기로 버튼의 이름을 표시해주기위한 처리같습니다. 기능상이 아니라 열기, 닫기 이름만 바뀌는 거죠
5. 카메라 제어라면,, 타이머로도 가능하죠 스레드방식의 컴포넌트는 보통 실시간장비 제어같은곳에 쓰입니다. 실시간 제어가 빠른 제어가 필요없다면 ComPort가 스레드가 아니더라도 무방할꺼 같군요..
그럼 허접답변이지만 참고정도는 하세요~~
개박살이었습니다.
박경원 님이 쓰신 글 :
: 안녕하세요.빌더 초보입니다.
:
: 시리얼 컴포넌트인 ComPort을 어렵게 다운받아서 등록까지 완료했습니다.
: 그리고 예제 소스(빌더 5.0소스)를 컴파일 시키고 직접 rs-232c케이블을 연결시켜 통신을 해봤죠.
: 데이터 전송은 잘 되는데, 몇가지 문제가 발생해서요.
:
: 첫번째는 컴파일을 하면 [C++Warning]ComMainForm.cpp(3):W8058 Cannot create pre-compiled header:write failed란 경고 메세지가 뜨네요. 아무리 에러를 찾아봐도 잘 되지가 않네요.
:
: 두번째는 버튼중에 Store버튼기능과 Load버튼 기능이 있는데,
: 버튼을 누르면 프로그램 에러 메세지 창이 뜨러다구요.
: 에러 메세지는 다음과 같습니다.
: 먼저 Store버튼을 물렀을 때 에러메세지 입니다.
: Project ComExampleCB5.exe raised exception class ERegistryException with message
: 'Failed to set data for 'Port''. Process stopped. Use Step or Run to continue.
:
: 두번째 Load버튼을 눌렀을 때의 에러메세지 입니다.
: Project ComExampleCB5.exe raised exception class EConvertError with message '"is
: not a valid integer value'.Process stopped. Use Step or Run to continue.
:
: Store와 Load의 관련 함수는 다음과 같습니다.
: 정확히 Load와 Store(아래 함수의 기능)기능이 무엇이고 왜 에러가 뜨는지 알고 싶습니다.
: void __fastcall TForm1::Bt_LoadClick(TObject *Sender)
: {
: ComPort->LoadSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: // ComPort->LoadSettings(stIniFile, "e:\test.ini");
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Bt_StoreClick(TObject *Sender)
: {
: ComPort->StoreSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: // ComPort->StoreSettings(stIniFile, "e:\test.ini");
: }
: //---------------------------------------------------------------------------
:
:
: 세번째는 ComPort->ShowSetupDialog()입니다.
: 실행을 하고 Settings버튼을 누르면 port가 com1하나만 나오는데,
: com2, com3, com4등의 항목을 나오게 할려면 어케 하면 되는지요.
:
: 네번째는 ComPort->Close() (또는 ComPort->Open();) 함수가 있는데,
: Button_Open->Caption = "Open";(또는 Button_Caption-"Close")가 관련이 있는 것 같은데...
: 구체적으로 어떻게 관련이 있는지 알고 싶습니다.
:
: 그리고 마지막 질문인데요...
: 쓰레드 방식을 이용한 컴포넌트도 있고 또 기능중에는 타임기능도 있는데,
: ComPort에는 이런 기능이 있는지요...
: 또 없다면 쓰레드 방시과 타임방식을 안 써도 무방한지요.
: 저의 경우 시리얼을 이용할 곳은 카메라 제어에 이용할려고 합니다.
: 그렇게 속도를 요하는 곳이 아닌 것 같은데...답변 부탁드립니다.
:
: 넘 질문이 방대하죠................
: 초보라 그러니 넓은 아량으로 봐주시고.....바쁜와중에도 답변해주시면 감사하겠습니다.
:
:
: 첨부:ComPort 예제 소스
:
:
: ComExampleCB5.bpr(빌더5.0 소스)
:
: /*********************** ComMainForm.h ***************************/
:
: //-------------------------------------------------------------
: #ifndef ComMainFormH
: #define ComMainFormH
: //-------------------------------------------------------------
: #include <CPortCtl.hpp>
: #include <CPort.hpp>
: #include <ExtCtrls.hpp>
: #include <StdCtrls.hpp>
: #include <Dialogs.hpp>
: #include <Forms.hpp>
: #include <Controls.hpp>
: #include <Graphics.hpp>
: #include <Classes.hpp>
: #include <SysUtils.hpp>
: #include <Messages.hpp>
: #include <Windows.hpp>
: #include <SysInit.hpp>
: #include <System.hpp>
: //-------------------------------------------------------------
: class TForm1 : public TForm
: {
: __published: // IDE-managed Componets
: TComPort* ComPort;
: TMemo* Memo;
: TButton* Button_Open;
: TButton* Button_Settings;
: TEdit* Edit_Data;
: TButton* Button_Send;
: TCheckBox* NewLine_CB;
: TPanel* Panel1;
: TButton* Bt_Store;
: TButton* Bt_Load;
: TComLed* ComLed1;
: TComLed* ComLed2;
: TComLed* ComLed3;
: TComLed* ComLed4;
: TLabel* Label2;
: TLabel* Label3;
: TLabel* Label4;
: TLabel* Label5;
: TComLed* ComLed5;
: TComLed* ComLed6;
: TLabel* Label1;
: TLabel* Label6;
: void __fastcall Button_OpenClick(TObject* Sender);
: void __fastcall Button_SettingsClick(TObject* Sender);
: void __fastcall Button_SendClick(TObject* Sender);
: void __fastcall ComPortOpen(TObject* Sender);
: void __fastcall ComPortClose(TObject* Sender);
: void __fastcall ComPortRxChar(TObject* Sender, int Count);
: void __fastcall Bt_LoadClick(TObject* Sender);
: void __fastcall Bt_StoreClick(TObject* Sender);
: private: // User declarations
: public: // User declarations
: __fastcall TForm1(TComponent* AOwner);
: };
: //-------------------------------------------------------------
: extern PACKAGE TForm1* Form1;
: //-------------------------------------------------------------
: #endif
:
:
:
:
:
: /*********************** ComMainForm.cpp ***************************/
:
: //---------------------------------------------------------------------------
: #include <vcl.h>
: #pragma hdrstop
:
: #include "ComMainForm.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button_OpenClick(TObject *Sender)
: {
: if (ComPort->Connected)
: ComPort->Close();
:
: else
: ComPort->Open();
: }
:
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button_SettingsClick(TObject *Sender)
: {
: ComPort->ShowSetupDialog();
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button_SendClick(TObject *Sender)
: {
: AnsiString Str;
:
: Str = Edit_Data->Text;
: if (NewLine_CB->Checked)
: Str = Str + "\r\n";
: ComPort->WriteStr(Str);
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::ComPortOpen(TObject *Sender)
: {
: Button_Open->Caption = "Open";
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::ComPortClose(TObject *Sender)
: {
: Button_Open->Caption = "Close";
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::ComPortRxChar(TObject *Sender, int Count)
: {
: AnsiString Str;
:
: ComPort->ReadStr(Str, Count);
: Memo->Text = Memo->Text + Str;
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Bt_LoadClick(TObject *Sender)
: {
: ComPort->LoadSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: // ComPort->LoadSettings(stIniFile, "e:\test.ini");
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Bt_StoreClick(TObject *Sender)
: {
: ComPort->StoreSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: // ComPort->StoreSettings(stIniFile, "e:\test.ini");
: }
: //---------------------------------------------------------------------------
:
:
:
:
:
:
:
:
:
:
|