寫MFC遇到的各種大大小小的坑

2021-09-24 22:33:23 字數 2746 閱讀 6583

搭建環境:vs2013(mfc120生成器)+python3.6

這是乙個記錄了遇到的大大小小的坑,真的是十個裡面九個是坑!!這裡是用來記錄我遇到的坑的,當然裡面還有許多未解之謎,我自己也不明白

有cmd命令列註冊,有直接regsvr32 c:\windows\system32(syswow64)\mscomm32.ocx註冊的,然後每次它都給我顯示註冊成功,但是到了vs上就是不能用……注意,這是針對你的目標平台和生成平台什麼的都是x64的mfc工程的。

顯示是什麼mfc120ud.dll有個什麼地方**錯誤。

注意:在它編譯的過程中,你可以看到它的output框中顯示的所有檔案載入路徑都是 c:\windows\system32\***xx之類的,所以私以為,正確註冊路徑應該是在system32資料夾之下,但是……問題是我也註冊過了,也顯示註冊成功了,但是踏馬就是不行……(ノ`д)ノ敲裡嗎……同時你可以清楚的看到,你的output框向上拉,能看到錯誤資訊:

然後通過mscomm1.**件中

對比上面的錯誤資訊中ole control的號碼,你能清楚的知道就是你的com控制項沒有註冊好的問題。那麼問題來了,明明在登錄檔上能看到,明明顯示註冊成功,但是……為什麼這個控制項就是不能用呢?究竟是為什麼呢?(ノ`д)ノ最後我得出,敲裡嗎,我還不如用winapi寫呢!!

這裡絮絮叨叨一些我知道的坑,我沒有踩的坑,嘻嘻(#^.^#)……

1.com1-9用的是:lpszportname.format(_t("com%d"), port);

com10以上包括10用的是:lpszportname.format(_t("\\\\.\\com%d"), port);

這個很關鍵,很有決定你是不是能成功開啟串列埠的關鍵!!!

2.關於用使用combo控制項進行串口號選擇時,可以使用for語句進行迴圈新增,但是注意!!!你的新增語句一定要格式對齊,不然它的列表會自動變成:com1,com11,com12……這樣,這時,你如果使用port = idcombo.getcursel() + 1;語句來讀取串口號的話,就相當於你在combo控制項列表中選擇的com11->port=2。這樣就很悲劇了。所以,我一般使用:

int i = 0;

cstring temp = _t("com");

for (i = 0; i < 30; i++)

3.另外關於串列埠接收方面,我比較喜歡使用執行緒進行全程監聽。這樣寫寫比較方便,畢竟我的工程不算大,但是,這樣做其實挺耗資源的,不過……反正我的工程不大,嘻嘻(#^.^#)

hthreadserial_recv = createthread(null, 0, (lpthread_start_routine)tread, (lpvoid)(com), 0, &m_dwiocontrolthreadid);

哦,對了,你的執行緒函式宣告的時候必須是static的,不然會報錯的!

static dword winapi cwinapidlg::tread(lpvoid lpvoid);這樣的!!不然會報錯。

好了,下面是怎麼使你接受到的文字顯示在接收框裡面的方法:

這是我的執行緒function,其中rdata是我用來進行接收快取的。紅筆畫的是使接收的東西顯示在編輯框的關鍵。注意,網上很多的postmessage的第乙個形參寫的好像都是***x->m_hwnd的。但是那個是舊版本的!!現在更新了,使用的方法變成上述的了。另外,網上有些說你的執行緒函式傳入的形參希望是m_hwnd的,也是走不通的!!因為這樣你就沒有辦法訪問到com的控制代碼了!!!!

上面那個是讓你把訊息傳遞出去的函式,為了使函式不報錯,你還需要在你的xxdlg.**件宣告乙個:

#define com_recvdata (wm_user+1000)

同樣在這個檔案上宣告這個函式:

這個函式是用於將訊息顯示在編輯框的函式。注意,它的返回型別必須是lresult 也有說是void,但是我的這個版本是lresult不然會報錯。而且如果宣告的位置不在declare_message_map()前面,也會報錯,各種錯,神奇的錯誤!!所以這點要注意!!!

讓我們來看看這個函式的function內涵:

這個很好理解,rx_txt是我接收編輯框的value值,然後更新編輯框顯示,然後彈出個框框告訴我顯示完畢了。

另外,還需要在這個xxdlg.c檔案中的這個地方宣告一下訊息的傳遞

如果,你經歷了這些,你的工程還是各種報錯,那麼……你還是重新新建工程吧……因為我也遭遇過這個狀況,完全不知道**錯了,然後新建工程重新按照這些重新寫就能用了。節哀……

開發專案遇到的大大小小問題總結

1移動端輸入六位密碼 游標位置不對 解決辦法,把它移到看不見的地方 input 2 textarea 文字域 resize none 禁止放大 overflow y hidden 進度條 3 遮罩層 shelter 4 打 發簡訊 打 給 0755 10086 發簡訊給 10086 5 rem px...

三正規化的依賴,小小的知識,大大的學問

三正規化使得資料庫的設計變得有據可依,資料庫的冗餘大大減少。然而,三正規化的定義,卻不那麼讓人省心,一堆文字外加數學知識,讓人著實有點小蒙。雖然說完全按照三正規化設計資料庫並不可取,但是要想設計乙個好的資料庫,三正規化的知識是必不可少的。要想更好理解三正規化的定義,那麼了解依賴是必不可少的,了解了這...

小小的IP,大大的耦合,你痛過嗎?

什麼是耦合?耦合,是架構中,本來不相干的 模組 服務 系統因為某些原因聯絡在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構狀態。感官上,怎麼發現系統中的耦合?作為技術人,每每在心中罵上下游,罵兄弟部門,這個東西跟我有什麼關係?為什麼需要我來配合做這個事情?明明不應該聯動,卻要被動配合,...