最近在做一個基于對話框的上位機,測驗發現一個大問題,不知道論壇大神能否給我指點指點。
void CMFCBakDemoDlg::OnCanDevcfg()
{
INT_PTR nRes;
nRes = m_DevCfg.DoModal();
if(IDCANCEL == nRes)
return;
}
void CDeviceConfig::OnBnClickedButtonStart()
{
if(VCI_StartCAN(Devtype,Devind,0) != STATUS_OK)
{
}else
{
GetDlgItem(IDC_BUTTON_Start)->SetWindowText("運行中"));
}
}
void CMFCBakDemoDlg::OnBnClickedButtonStart()
{
if(VCI_StartCAN(m_DevCfg.Devtype,m_DevCfg.Devind,0) != STATUS_OK)
{
}else
{
GetDlgItem(IDC_BUTTON_Start)->SetWindowText("運行中"));
}
}
Devtype和Devind是CDeviceConfig類的共有成員。
上面3斷代碼,其中第三段代碼運行失敗,除錯發現Devtype和Devind由原來的3和0,呼叫后m_DevCfg.Devtype和m_DevCfg.Devind這兩個值都變成了0?不知道為什么出現這種問題,以為用VC6.0++也可以正常的,不知道VS2010為什么不能了,希望大神指點迷津。謝謝啦。
uj5u.com熱心網友回復:
設定資料斷點 除錯運行uj5u.com熱心網友回復:
這幾行代碼,看不到問題所在,關鍵要找到修改m_DevCfg.Devtype和m_DevCfg.Devind代碼才行。uj5u.com熱心網友回復:
可以借助資料改變斷點:
#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熱心網友回復:
好像找到了問題?但還不明白為什么?

如果定義的變數再上面的public里就不成功,不知道這是什么原因。
uj5u.com熱心網友回復:
m_DevCfg.Devtypem_DevCfg=0 ?
uj5u.com熱心網友回復:
m_DevCfg.Devtype
m_DevCfg=0 ?
用m_DevCfg.domodal顯示子視窗,在子視窗中更新Devtype變數等于3,Devtype是關聯一個控制元件的變數,結束后EndDiagol(0)退出子視窗后,在父視窗中m_DevCfg.Devtype獲取到的資料是0。
uj5u.com熱心網友回復:
EndDiagol(0)退出子視窗后, m_DevCfg已銷毀, Devtype 可能已 不存在 !通常 m_DevCfg 的 結果 要 保存到 ini 檔案 中 已備 下次 啟動 程式 時 讀入 config
uj5u.com熱心網友回復:
EndDiagol(0)退出子視窗后, m_DevCfg已銷毀, Devtype 可能已 不存在 !
通常 m_DevCfg 的 結果 要 保存到 ini 檔案 中 已備 下次 啟動 程式 時 讀入 config
m_DevCfg的定義是 CDeviceConfig m_DevCfg,定義在在父視窗中,在父視窗中m_DevCfg.domadal,可以打開子視窗,但是m_DevCfg.Devtype讀取到的永遠是0,但是將Devtype定義在CDeviceConfig中的protected 下public中就不會出現這個問題,
m_DevCfg.Devtype讀取的值就是子視窗設定的值。
uj5u.com熱心網友回復:
“但是將Devtype定義在CDeviceConfig中的protected 下public中就不會出現這個問題,“protected:
int xxxx;
public:// 表示 protected: 結束, 開始 public ,
int yyyy;
與 直接 放 public: 無差別, 問題 在 別處,
你的 程式 有 Config 那么 程式 啟動 應該 先讀 Config 以后有改變 要 存入 Config 。
通常 Config 里的變數定義在 app 中 ,取時 使用 theApp.xxxx 或者 AfxGetApp()->xxxx
uj5u.com熱心網友回復:
“但是將Devtype定義在CDeviceConfig中的protected 下public中就不會出現這個問題,“
protected:
int xxxx;
public:// 表示 protected: 結束, 開始 public ,
int yyyy;
與 直接 放 public: 無差別, 問題 在 別處,
你的 程式 有 Config 那么 程式 啟動 應該 先讀 Config 以后有改變 要 存入 Config 。
通常 Config 里的變數定義在 app 中 ,取時 使用 theApp.xxxx 或者 AfxGetApp()->xxxx


不好意思,因為系統環境加密和代碼量大,只能上傳部分截圖還煩請大家幫我解決一下問題,謝謝。想要知道原因。
uj5u.com熱心網友回復:
給你說了 將Devtype 定義到 App中;如、
DWORD m_Devtype ;
在 Config OK 中
AfxGetApp()->m_Devtype=Config 中 Devtype !
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/61003.html
標籤:基礎類
