RS232Cの制御プログラムの改造

解決


勉4号  2008-07-10 07:00:15  No: 68678

http://www.alab.t.u-tokyo.ac.jp/~bond/doc/rs232c.html
に記載されているRC232C制御のプログラムを改造したいと思っています.

上記のプログラム内のCSerialComTestDlg.cppに以下のソースが含まれます.

void CSerialComTestDlg::OnSend() 
{
   CEdit *pSendED=(CEdit*)GetDlgItem(IDC_DATA_SEND);
   char buf[MAX_COM_SIZE];
   pSendED->GetWindowText(buf,MAX_COM_SIZE);
   int len;
   len=strlen(buf);
   buf[len++]=0x0d; //CR
   buf[len++]=0x0a; //LF
   buf[len]='\0'; //NULL
   com1.Send(buf, len);
}
ここでは,エディットボックス内の文字列を取得して,それをRC232Cに送っていると思われます.(すみません,よく分かりません...)
そこで,エディットボックスからの入力ではなく,あらかじめ決められた文字列をRC232Cに送るためには,どのように書き換えればよいでしょうか?

以下のソースを試したところ,
void CSerialComTestDlg::OnSend() 
{
   char buf[MAX_COM_SIZE];
   buf="AIUEOaiueo";
   int len;
   len=strlen(buf);
   buf[len++]=0x0d; //CR
   buf[len++]=0x0a; //LF
   buf[len]='\0'; //NULL
   com1.Send(buf, len);
}
error C2440: '=' : cannot convert from 'char [11]' to 'char [512]'There is no context in which this conversion is possibleというエラーが出てきました.現在,送りたい文字列(例えばAIUEOaiueo)の指定の仕方を模索中です.

元のRC232C制御プログラムに関してですが,
rs232cCTL.cppの関数では,
COMポートハンドルの取得はUINT CRs232cCtl::Open(HWND hWnd, char* port_name)
送受信バッファ初期化・基本通信条件の設定はUINT CRs232cCtl::SetComConfig(DCB* dcb)
タイムアウト時間の設定はUINT CRs232cCtl::SetTimeouts(COMMTIMEOUTS *to)
送信はUINT CRs232cCtl::Send(char* data, unsigned int num)
受信はUINT CRs232cCtl::ReceiveThread(LPVOID arg)
終了処理はCRs232cCtl::~CRs232cCtl()
が対応しています。(とさん情報)

宜しくお願い致します.


επιστημη  URL  2008-07-10 07:03:45  No: 68679

×   buf="AIUEOaiueo";
○   strcpy(bu, "AIUEOaiueo");


επιστημη  URL  2008-07-10 07:05:15  No: 68680

おっと、strcpy(buf, "AIUEOaiueo"); がせーかい。

# buf="AIUEOaiueo"; ではなぜイケナイかは、勉強しましょう。


勉4号  2008-07-11 02:34:16  No: 68681

επιστημηさん,ありがとうございます!

bufとAIUEOaiueoのサイズが違うのでエラーが出たんだと思いましたが,
どうしてstrcpy(buf, "AIUEOaiueo")でできたのかは,まだ分かりません...もうちょっと勉強します!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加