|
시리얼 포트제어를 할려구 컴포넌트(nrComm-www.deepsoftware.ru)를 하나써서 프로그램을 짰는데요.
제공해주는 델파이 소스에서는 그냥 #13(캐리지리턴)을 변수에 지정해두고 스트링에 붙이면 입력이되는군요.
그러니깐 소스가 아래와 같은 겁니다.
var
Form1: TForm1;
implementation
uses unit2;
{$R *.DFM}
Var
Buff:string='';
EndOfString:char=#13;<---------------여기서 캐리지리턴을 부여해주고
MyThread:TMyThread;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
nrCOmm1.Active:=CheckBox1.Checked;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
nrComm1.ConfigDialog;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
nrCOmm1.SendString(Edit1.Text+EndOfString);<-----버튼이 눌리면 에디트에 입력된 스트링에다가 리턴을 붙여서 날리는 거죠.
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyThread:=TMyThread.Create(True);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
MyThread.Free;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked
then MyThread.Resume
else MyThread.Suspend;
end;
procedure TForm1.nrComm1AfterReceive(Com: TObject; Buffer: Pointer;
Received: Cardinal);
var i:integer;
ch:char;
begin
for i:=0 to Received-1 do begin
ch:=PChar(Buffer)[i];
if ch=EndOfString then begin
ListBox1.Items.Add(Buff);
Buff:='';
end else Buff:=Buff+ch;
end;
end;
end.
문제는 제가 C++빌더를 쓰는 관계로 델파이로 된 이 부분을 빌더로 바꾸고 싶은데, 그냥
nrComm1->SendString(Edit1->Text+"\n");
해서는 작동을 하질 않는군요.
그래서 '\n', VK_RETURN을 돌려가며 붙여봤지만 여전히 감감무소식이구요.
디버그 하면서 보니깐 스트링의 끝 부분에 \n 이 들어같것은 분명한데...
그래서 꽁수를 써본다고 strcopy,strcat을 써서 그냥 CString상태로 끝에 \n을 붙여봤는데, 이것두 안되더군요.
혹시 이런문제의 해결방법을 아시면 조언을 부탁드립니다.
죄송.. 실력이 워낙에 허접하다보니 이런 글로 게시판 복잡하게 만듭니다.
현재는
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
nrComm1->ConfigDialog();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
nrComm1->Active=!(nrComm1->Active);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
nrComm1->Active=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString strSending;
char retChar[2];
char* szBuffer = new char[(EditStrToSend->Text).Length()];
retChar[0]='\n';
retChar[1]='\n';
StrCopy(szBuffer,EditStrToSend->Text.c_str());
StrCat(szBuffer, retChar);
strSending=szBuffer;
delete [] szBuffer;
nrComm1->SendString(strSending);
}
//---------------------------------------------------------------------------
이렇게 고치는데까지 해보다가 열받아서 머리 찟고 있는 중입니다.
고수님들 헬미요...
|