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()
が対応しています。(とさん情報)
宜しくお願い致します.
× buf="AIUEOaiueo";
○ strcpy(bu, "AIUEOaiueo");
おっと、strcpy(buf, "AIUEOaiueo"); がせーかい。
# buf="AIUEOaiueo"; ではなぜイケナイかは、勉強しましょう。
επιστημηさん,ありがとうございます!
bufとAIUEOaiueoのサイズが違うのでエラーが出たんだと思いましたが,
どうしてstrcpy(buf, "AIUEOaiueo")でできたのかは,まだ分かりません...もうちょっと勉強します!
ツイート | ![]() |