串口調試助手源程序
void CSCommTestDlg::OnTimer(UINT nIDEvent)
{
// TOD Add your message handler code here and/or call default
OnButtonManualsend();
CDialog::OnTimer(nIDEvent);
}
再在在主對話(huà)框中加入一個(gè)復選接鈕,ID為IDC_CHECK_AUTOSEND Caption: 自動(dòng)發(fā)送(周期1秒),再利用ClassWizard為其添加BN_CLICK消息處理函數void CSCommTestDlg::OnCheckAutosend():
void CSCommTestDlg::OnCheckAutosend()
{
// TOD Add your control notification handler code here
m_bAutoSend=!m_bAutoSend;
if(m_bAutoSend)
{
SetTimer(1,1000,NULL);//時(shí)間為1000毫秒
}
else
{
KillTimer(1); //取消定時(shí)
}
}
其中:m_bAutoSend為BOOL型變量,在CLASSVIEW中為CSCommTestDlg類(lèi)加入,并在構造函數中初始化:
m_bAutoSen=FALSE;
現在可以運行程序測試了。
11.什么是VARIANT數據類(lèi)型?如何使用VARIANT數據類(lèi)型?
不知如何使用VARIANT數據類(lèi)型, 有不少朋友對VARIANT這個(gè)新的數據類(lèi)型大感頭疼。SetOutput()函數中 需要的VARIANT參數還可以使用COleVariant類(lèi)的構造函數簡(jiǎn)單生成,現在GetInput()函數的返回值也成了VARIANT類(lèi)型,那么如何從返回的值中提取有用的內容。 VARIANT及由之而派生出的COleVariant類(lèi)主要用于在OLE自動(dòng)化中傳遞數據。實(shí)際上VARIANT也只不過(guò)是一個(gè)新定義的結構罷了,它的主要成員包括一個(gè)聯(lián)合體及一個(gè)變量。該聯(lián)合體由各種類(lèi)型的數據成員構成, 而該變量則用來(lái)指明聯(lián)合體中目前起作用的數據類(lèi)型。我們所關(guān)心的接收到的數據就存儲在該聯(lián)合體的某個(gè)數據成員中。 該聯(lián)合體中包含的數據類(lèi)型很多,從一些簡(jiǎn)單的變量到非常復雜的數組和指針。由于通過(guò)串口接收到的內容常常是一個(gè)字節串,我們將使用其中的某個(gè)數組或指針來(lái)訪(fǎng)問(wèn)接收到的數據。這里推薦給大家的是指向一個(gè)SAFEARRAY(COleSafeArray)類(lèi)型變量。新的數據類(lèi)型SAFEARRAY正如其名字一樣,是一個(gè)“安全數組”,它能根據系統環(huán)境自動(dòng)調整其16位或32 位的定義,并且不會(huì )被OLE改變(某些類(lèi)型如BSTR在16位或32位應用程序間傳遞時(shí)會(huì )被OLE翻譯從而破壞其中的二進(jìn)制數據)。大家無(wú)須了解SAFEARRAY的具體定義,只要知道它是另外一個(gè)結構,其中包含一個(gè) (void *)類(lèi)型的指針pvData,其指向的內存就是存放有用數據的地方。 簡(jiǎn)而言之,從GetInput()函數返回的VARIANT類(lèi)型變量中,找出parray 指針,再從該指針指向的SAFEARRAY變量中找出pvData指針,就可以向訪(fǎng)問(wèn)數組一樣取得所接收到的數據了。具體應用請參見(jiàn)void CSCommTestDlg::OnComm()函數。
大概我現在也說(shuō)不清這個(gè)問(wèn)題,我自己從第一次接觸這個(gè)東西,到現在還是給別人講不清。
評論