最近按公司要求封裝一個OCX,原本很簡單的一件事卻遇到一個很奇怪的問題。多線程
在編譯器vs2010編譯後註冊報「逐用戶重定向」ide
當時在莫度的帶領下差點全軍覆滅,提到2點解決方案(狗比膏藥--坑的一逼)函數
1.改工程屬性從DLL爲lib線程
變成
這種方案雖然編譯器是過去了可是regsvr32註冊沒一點反應。3d
2.改連接器配置指針
這個更狠,編譯器都過不了。對象
以上爲爬坑分割線,下面來點乾貨blog
當時調用其它的DLL動態庫,還有OCX事件又是合做開發,沒辦法先縮小問題範圍接口
把事件刪了-----外甥打燈籠--照舊事件
把工程分割開 ---- 本人的沒問題(當時高興的有一種要甩鍵盤的衝動)
合做開發一個team不能拉下弟兄無論,就幫弟兄逐步縮減範圍。。。。
直到咱們註釋了一個調DLL的函數(靜態方式調用,及.h+lib)發現
成了。。。。真成了
OCX工程中靜態調用DLL的接口,且參數是函數指針 既有多是這個緣由
後面須要在OCX用到多線程,但多線程__stdcall方式來進行資源管理的,而在多線程方法裏須要用到OCX事件,
當時腦殼一熱不就是new個OCX的XXCtrl對象,而後對象.事件解決。(too young too simple)
JS崩潰了,JS崩潰了,JS真的無情的崩潰了(此處有n!+1個F**K)
開動小腦筋,多線程方法裏不能NEW,設一個全局變量不就OK了
而後遇到了多年未見的老朋友(「註冊失敗 逐用戶重定向」),雖然才1天沒見,但見到不但願見到的總感受
快過了一生。
OCX工程代碼從新new控制類對象 既有多是這個緣由
解決辦法是:老子刪了多線程代碼,投入while大法的懷抱(此處有壞笑大笑)