void CRSDlg::OnBnClickedButtonOpen()
{
// TODO: 在此添加控制元件通知處理程式代碼
CString str,str1,n;//定義字串
GetDlgItemText(IDC_BUTTON_OPEN,str);
CWnd *h1;
h1=GetDlgItem(IDC_BUTTON_OPEN);//指向空間的caption
if(!m_mscom.get_PortOpen())
{
m_Comb2.GetLBText(m_Comb2.GetCurSel(),str1);//取得所選的字符,放在str1里面
str1=str1+','+'n'+','+'8'+','+'1';//設定資料格式
m_mscom.put_CommPort((m_Comb1.GetCurSel()+1));//選擇串口
m_mscom.put_InputMode(1);//設定輸入方式為二進制方式
m_mscom.put_Settings(str1);//設定波特率
//m_mscom.put_Settings(_T("9600,n,8,1"));
m_mscom.put_InputLen(1024);//設定當前接收區資料長度為1024
m_mscom.put_RThreshold(1);//緩沖區一個字符引發事件
m_mscom.put_RTSEnable(1);//設定RT允許
m_mscom.put_PortOpen(true);//打開串口
if(m_mscom.get_PortOpen())
{
str=_T("關閉串口");
UpdateData(true);
h1->SetWindowText(str);//改變按鈕名稱為“關閉按鈕”
}
}
else
{
m_mscom.put_PortOpen(false);
if(str!=_T("打開串口"))
{
str=_T("打開串口");
UpdateData(true);
h1->SetWindowText(str);//改變按鈕名稱為打開串口
}
}
void CRSDlg::OnComm()
{
static unsigned int cnt = 0;
VARIANT variant_inp;
COleSafeArray safearryay_inp;
long len,k;
unsigned int data[1024]={0};
byte rxdata[1024];
CString stremp;
if(m_mscom.get_CommEvent() == 2)
{
cnt++;
variant_inp = m_mscom.get_Input();
safearryay_inp = variant_inp;
len = safearryay_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k);
}
for (k=0;k<len;k++)
{
stremp.Format(_T("%c"),*(rxdata+k));
m_EditReceive += stremp;
CString temp=_T("\r\n");
m_EditReceive += temp;
}
}
UpdateData(FALSE);
}
以上是部分代碼,瘋了,總是有問題,最后這個問題,程式除錯沒問題,運行之后,打開串口接收資料就會提示圖片顯示的那樣,
RS.exe 中的 0x7582845d (KernelBase.dll) 處最可能的例外: Microsoft C++ 例外: 記憶體位置 0x00000000 處的 [rethrow]。
RS.exe 中的 0x7582845d (KernelBase.dll) 處最可能的例外: Microsoft C++ 例外: 記憶體位置 0x003bd7d4 處的 COleDispatchException。
實在是不知道為啥了?求各位大神解決
uj5u.com熱心網友回復:
除錯一下 看哪里問題 ?uj5u.com熱心網友回復:
先catch下,看看拋出的啥例外,然后下斷跟,看看在哪一步出現問題uj5u.com熱心網友回復:
我遇到和你一樣的問題,我將資料通過藍牙配接器轉串口接收后出現這個問題,直接用usb串口能接收到資料,不知道你是不是也是用藍牙傳輸才出的這個問題,我也在想如何才能解決藍牙接收這個問題。uj5u.com熱心網友回復:
有沒有映射事件 ?DECLARE_EVENTSINK_MAP
BEGIN_EVENTSINK_MAP
ON_EVENT
END_EVENTSINK_MAP
uj5u.com熱心網友回復:
Mscomm是vc6時代的了,相信你也很煩那些varient,用第三方類,幾個函式就可以解決問題http://blog.csdn.net/sunnyloves/article/details/5575995uj5u.com熱心網友回復:
多謝各位了,,雖然還是沒找到問題,,但是debug得到的exe檔案在其他計算機上卻運行的很好,沒有出現問題,不知道為啥!先這樣吧uj5u.com熱心網友回復:
我也遇到同樣問題,請問有解決的嗎?uj5u.com熱心網友回復:
我也遇到同樣問題,請問有解決的嗎?uj5u.com熱心網友回復:
我也遇到同樣問題,請問有解決的嗎?uj5u.com熱心網友回復:
我也是這個問題有沒有人能幫忙解決的啦uj5u.com熱心網友回復:
Cstring m_EditReceive,stremp ;
for (k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k); //字符型
stremp.Format("%02X ",bt);
m_EditReceive += stremp;
}
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。判斷是否越界訪問,可以在陣列的最后一個元素之后對應的地址處設定資料讀寫斷點。如果該地址對應其它變數干擾判斷,可將陣列多宣告一個元素,并設定資料讀寫斷點在該多出元素對應的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int a,b[11];//本來是b[10],為判斷哪句越界,故意宣告為b[11]
srand((unsigned int)time(NULL));//按兩次F11,等黃色右箭頭指向本行時,除錯、新建斷點、新建資料斷點,地址:&b[10],位元組計數:4,確定。
while (1) {//按F5,會停在下面某句,此時a的值為10,b[10]已經被修改為對應0..4之一。
b[(a=rand()%11)]=0;
Sleep(100);
b[(a=rand()%11)]=1;
Sleep(100);
b[(a=rand()%11)]=2;
Sleep(100);
b[(a=rand()%11)]=3;
Sleep(100);
b[(a=rand()%11)]=4;
Sleep(100);
}
return 0;
}
uj5u.com熱心網友回復:

樓主如果一定要用Mscomm可以安裝一個vc6
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/101161.html
上一篇:錯誤100error C2440: “static_cast”: 無法從“void (__thiscall CGameView::* )(int)”轉換為“
