青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

萬星星@豌豆莢 歡迎加入我們
一個吃軟飯的男人!!!!!我只想寫程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0
總愛嘮叨幾句(只關心技術的人可以跳過,^_^)
來北京前,在武漢做開發,那里全部用VC,并且采用比較傳統的方法解決問題。漸漸的,我感覺到自己的知識體系很不完善,做事情總是想采取簡潔通用完美的方案,然而認識有限總是無功而返,回到傳統解決途徑上去。那個地方沒有人可以教我,可能由于大家專注不同。一個人苦心鉆研技術,顯得煢煢孑立,很多時候我都在懷疑為什么別人可以查閱到那么多資料,他們到底有什么秘訣?我看到我的研究生同學,他們都在公司做技術,應該很有朝氣活力,敢于研究技術的。可是我為他們擔心,他們逐漸淪為代碼機器,不敢于改革自己現有的編程模式,把思維禁錮在一個很小的范圍。我的一個同學給我發牢騷,說頭又給他一個MIS項目維護代碼,抱怨里面代碼如何亂,風格如何糟糕,動不動就死機。他總問我某個控件實現特定功能怎么做,我很抱歉,因為有的我也不知道。我想起2年前的自己,熱衷于駕馭控件的技巧,機器上的各類控件琳瑯滿目,每發現一個好控件,如獲珍寶收藏起來,然而大多都沒有派上用場。學習的過程讓我明白一個道理:應該形成解決問題的方案,學會解決問題才是王道。
大三開的COM課程,我剛一接觸,就深深愛上這個東西,當時幾個班就我最用心學,可能大家覺得很難沒有認真學。我想說的是要感謝COM,它應該是C++開發從編碼到設計的轉折點,給我最深的感覺就是它是一種框架行為。
來到北京,我的視野開闊很多,在一個技術遠遠超過自己的人的指點下,我如沐春風。我從一個不怕coding的人成長成一個不怕設計的人,自然心高氣爽許多。

框架技術體系

一直喜歡講體系,學習技術,總是想把握住整個體系,有利有弊。利就是眼界開闊,增加底氣;弊就是戰線太長,自己很疲憊。非常贊成中國的中庸思想,對于我來說,COM就是中庸,上下開壑,開辟.NET和OLE學習之路。
Automation作為COM之前的一種老技術,翻譯過來叫自動化。由于一開始接觸的就是COM,習慣COM和MFC分離開發,因此一直沒有很好理解Automation技術,只知道它集成在MFC應用中,以類型庫方式提供服務。
昨天寫完MFC和VBA集成后,突然感覺到MFC應用和VBE集成之間的牽連,能感覺到VBE就像一個提供Automation的Server。于是我花了一些事件研究Automation,不知為何,我總懷戀老技術,喜歡琢磨“過時”的東西。
總感嘆Office系列軟件,如此無縫集成,毫無疑問,它的模型是非常清晰的,框架架構出來的應該就是模型,這種架構技巧需要技術的積累。我曾經下決心學習設計模式,每每都沉不住氣。當我深入學習MFC各種應用開發模型的時候,我明白了高人思維為何深邃,源于他們對MFC的深入探索。MFC在許多人眼里過時了,我談過的很多技術也有人指出落后了,我喜歡深入研究MFC,因為它里面有許多思想值得學習。

Automation開發
這里我以對話框應用程序討論自動化,當然象office那樣的大型軟件在app,mainframe,doc層面上都有。
建立一個基于對話框的MFC應用程序,注意選擇automation支持。簡單來說實現了IDispatch接口的類支持自動化。
生成一個對話框類和一個對話框代理類,VBA里面也存在這種思想。一個C++類對象是死的,接口是活得,所以要是的應用靈活,就必須為對象配備一個組件對象,外界可以通過組件接口操縱C++對象。
Dlg類中有成員
CAutomationServerDlgAutoProxy*?m_pAutoProxy;
代理類中有成員
CAutomationServerDlg*?m_pDialog;
這個就稱為“對偶”設計模式吧!
這個程序可以作為獨立程序啟動,也可以作為自動化服務啟動。
為自動化接口添加屬性,為自動化控制(客戶程序)提供服務:

自動化屬性實現:
BOOL?CAutomationServerDlgAutoProxy::GetVisible()?
{
????
//?TODO:?Add?your?property?handler?here
????
????
return?(m_pDialog!=NULL?&&?(m_pDialog->GetStyle()&WS_VISIBLE)!=0);
}


void?CAutomationServerDlgAutoProxy::SetVisible(BOOL?bNewValue)?
{
????
//?TODO:?Add?your?property?handler?here
????if(bNewValue?=?GetVisible())
????
{
????????
return;
????}

????
//?visiable
????if(bNewValue)
????
{
????????
//?embed?start
????????if(m_pDialog?==?NULL)
????????
{
????????????
if(AfxGetThread()->m_pMainWnd?==?NULL)
????????????
{
????????????????m_pDialog?
=?new?CAutomationServerDlg();
????????????????AfxGetThread()
->m_pMainWnd?=?m_pDialog;
????????????}

????????????
//?show?it
????????????m_pDialog->ShowWindow(SW_SHOWNORMAL);
????????}

????}

????
else
????
{
????????m_pDialog
->ShowWindow(SW_HIDE);
????}

}

BSTR?CAutomationServerDlgAutoProxy::GetWindowText()?
{
????CString?strResult;
????
//?TODO:?Add?your?property?handler?here
????m_pDialog->GetWindowText(strResult);
????
return?strResult.AllocSysString();
}


void?CAutomationServerDlgAutoProxy::SetWindowText(LPCTSTR?lpszNewValue)?
{
????
//?TODO:?Add?your?property?handler?here
????m_pDialog->SetWindowText(lpszNewValue);
}

自動化注冊機制
在自動化代理類里面有這樣一個宏聲明:
?
IMPLEMENT_OLECREATE2(CAutomationServer2DlgAutoProxy,?"AutomationServer2.Application",?0xaa98c00e,?0xd46f,?0x4e9e,?0xaf,?0x97,?0xc8,?0x24,?0xa0,?0x29,?0xe4,?0xa4)
看看IMPLEMENT_OLECREATE2的定義:
#ifndef?IMPLEMENT_OLECREATE2
#define?IMPLEMENT_OLECREATE2(class_name,?external_name,?l,?w1,?w2,?b1,?b2,?b3,?b4,?b5,?b6,?b7,?b8)?\
????AFX_DATADEF?COleObjectFactory?class_name::factory(class_name::guid,?\
????????RUNTIME_CLASS(class_name),?FALSE,?_T(external_name));?\
????
const?AFX_DATADEF?GUID?class_name::guid?=?\
????????
{?l,?w1,?w2,?{?b1,?b2,?b3,?b4,?b5,?b6,?b7,?b8?}?};
#endif?//?IMPLEMENT_OLECREATE2
具體注冊代碼是:
COleObjectFactory::UpdateRegistryAll();
但是這個函數似乎與上面的宏定義沒有關系,為了找到關系我進入UpdateRegistryAll函數內部,發現:
for?(COleObjectFactory*?pFactory?=?pModuleState->m_factoryList;
????????pFactory?
!=?NULL;?pFactory?=?pFactory->m_pNextFactory)
????
{
????????
if?(!pFactory->UpdateRegistry(bRegister))
????????
{
????????????AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST);
????????????
return?FALSE;
????????}

????}
原來模塊狀態記錄了所有類廠列表,為了找到類廠列表加入類廠位置,我搜索了mfc源碼,發現OLEFACT.cpp里面有這樣的代碼:
COleObjectFactory::COleObjectFactory(REFCLSID?clsid,
????CRuntimeClass
*?pRuntimeClass,?BOOL?bMultiInstance,?LPCTSTR?lpszProgID)
{
????ASSERT(pRuntimeClass?
==?NULL?||
????????pRuntimeClass
->IsDerivedFrom(RUNTIME_CLASS(CCmdTarget)));
????ASSERT(AfxIsValidAddress(
&clsid,?sizeof(CLSID),?FALSE));
????ASSERT(lpszProgID?
==?NULL?||?AfxIsValidString(lpszProgID));

????
//?initialize?to?unregistered?state
????m_dwRegister?=?0;???//?not?registered?yet
????m_bRegistered?=?FALSE;
????m_clsid?
=?clsid;
????m_pRuntimeClass?
=?pRuntimeClass;
????m_bMultiInstance?
=?bMultiInstance;
????m_lpszProgID?
=?lpszProgID;
????m_bOAT?
=?(BYTE)?OAT_UNKNOWN;

????
//?licensing?information
????m_bLicenseChecked?=?FALSE;
????m_bLicenseValid?
=?FALSE;

????
//?add?this?factory?to?the?list?of?factories
????m_pNextFactory?=?NULL;
????AFX_MODULE_STATE
*?pModuleState?=?_AFX_CMDTARGET_GETSTATE();
????AfxLockGlobals(CRIT_OBJECTFACTORYLIST);
????pModuleState
->m_factoryList.AddHead(this);
????AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST);

????ASSERT_VALID(
this);
}
原來類廠構造函數里面把自己加入到模塊狀態的列表里面。
現在總結一下:IMPLEMENT_OLECREATE2宏定義了一個類廠實例,在構造的時候加入模塊狀態的類廠列表,然后在模塊初始化的時候,調用類廠的UpdateRegistry函數更新注冊表,實現注冊。

Automation調用
下面生成一個客戶程序控制AutomationServer,基于MFC對話框應用程序。
添加自動化程序產生的類型庫:添加類->從類型庫導入剛生成的tlb文件,向導會生成調用類。
創建自動化組件,顯示自動化服務程序:
if(m_ias.CreateDispatch("AutomationServer.Application"))
{
????m_ias.SetVisible(TRUE);
}

通過按鈕事件設置服務器窗口標題,演示調用服務:
void?CAutomationControlDlg::OnButtonSettext()?
{
????
//?TODO:?Add?your?control?notification?handler?code?here
????UpdateData();
????
if(m_ias.m_lpDispatch)
????
{
????????m_ias.SetWindowText(m_strText);
????}

}


void?CAutomationControlDlg::OnButtonGettext()?
{
????
//?TODO:?Add?your?control?notification?handler?code?here
????if(m_ias.m_lpDispatch)
????
{
????????m_strText?
=?m_ias.GetWindowText();
????????UpdateData(FALSE);
????}

}

下面是截圖
控制啟動激活自動化服務程序:

調用自動化服務功能


代碼下載
posted on 2006-08-31 20:33 萬連文 閱讀(4376) 評論(7)  編輯 收藏 引用 所屬分類: MFC

FeedBack:
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 20:57 | 漂舟
好文 ,
“一直喜歡講體系,學習技術,總是想把握住整個體系”,
支持這一點,這段時間沒做項目,
潛心在做研究 ?
程序我沒看,只看你文字介紹就相當不錯了,
今天從辦公室才回來一會,
邊吃方便面邊看,  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 21:01 | 漂舟
“逐漸淪為代碼機器,
不敢于改革自己現有的編程模式,
把思維禁錮在一個很小的范圍”
偶深有感觸,差點就變成這種類型的Coder了,
每天為了快速完成特定的業務,沒精力研究其它更多的東西,
只有在晚上下班后,疲倦了都還要強堅持看書,
羨慕你,經常做做研究,學學宏觀的東西,
真爽
  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 21:29 | 萬連文
現在不知道是工作還是學習,可能都算,在北京遇到一個編程前輩,指點我,現在主要做MFC/ATL/.NET/ActiveX混合編程框架,有時間我就搞點古老玩意。  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 21:58 | 漂舟
得到"編程前輩“的指點,
這一點太好了啊,
可以在宏觀上、大的策略上,或者編程之路上少走點彎路,
或走上條”捷徑“,
我一直想找機會擺脫當前環境,
想找個有能人的地方,好好學學,
我們公司是私人性質的小公司,
我在里面都還算是軟件項目"帶頭大哥",真慚愧,
你機遇比較好,再加上勤奮,
前途無量,
女朋友也會有更好的 :)

我喜歡看MFC源碼 ,這段時間比較多的在研究C++各項技術  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 22:14 | 萬連文
注意利用MFC、.NET等向導學習技術,注意學會利用MSDN學習技術、注意向身邊有思想的人學習技術是我總結的學習技術的方法。2004年10月8日進入公司做項目,掐指一算快2年,對自己技術的提高還算滿意。深刻體會到一句話:編程不扎實做上十年根本無法談上技術大師。MFC的Frame框架、文檔視圖、控制條等源碼部分都值得反復學習。  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2006-08-31 23:27 | 漂舟
”注意向身邊有思想的人學習技術“,
同感,特別是那些經驗老道的程序員,
或系統分析員,項目開發總設計師,
只是我周圍的生活圈,
像這類的長者太少了。  回復  更多評論
  
# re: MFC應用集成老技術自動化(Automation)
2008-12-24 11:04 | lijinyan3000
好,寫的相當好!!!  回復  更多評論
  
簡歷下載
聯系我

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(66)

隨筆分類

隨筆檔案

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成网在线播放| 亚洲电影自拍| 国产一区二区三区在线观看免费| 欧美日韩一区成人| 欧美日韩精品久久| 欧美午夜电影网| 国产精品一区二区三区观看| 国产精品资源| 激情久久久久久久| 亚洲激情六月丁香| av成人天堂| 亚洲主播在线| 久久免费黄色| 亚洲国产精品电影在线观看| 99ri日韩精品视频| 亚洲愉拍自拍另类高清精品| 久久精品国产亚洲一区二区三区| 欧美77777| 国产精品进线69影院| 国产综合色一区二区三区| 亚洲精选国产| 久久精品亚洲国产奇米99| 亚洲福利电影| av成人免费观看| 久久视频一区二区| 国产精品盗摄久久久| 亚洲国产精品高清久久久| 亚洲欧美电影在线观看| 免费人成精品欧美精品| 中国av一区| 牛人盗摄一区二区三区视频| 国产精品午夜春色av| 亚洲精品免费看| 久久久蜜桃一区二区人| 一本色道久久综合狠狠躁的推荐| 久久国产毛片| 国产精品区一区二区三| 亚洲淫片在线视频| 精品999网站| 一区二区三区四区精品| 久久亚洲高清| 亚洲综合二区| 欧美日韩国产在线| 亚洲黄色影院| 久久综合九色综合久99| 亚洲丝袜av一区| 欧美精选一区| 91久久精品网| 久久性色av| 欧美一区二区福利在线| 国产精品成人在线| 9色国产精品| 亚洲国产欧美不卡在线观看| 久久综合久久综合久久综合| 狠狠久久五月精品中文字幕| 午夜精品久久久久久久久久久| 亚洲精品女av网站| 国产精品电影网站| 亚洲精品视频免费观看| 美女网站久久| 久久久www成人免费毛片麻豆| 国产伦精品一区二区| 亚洲欧美国产精品桃花| 99在线视频精品| 欧美日韩性视频在线| 一本到高清视频免费精品| 亚洲精品国产拍免费91在线| 欧美日韩另类国产亚洲欧美一级| 亚洲免费观看高清完整版在线观看| 欧美国产精品久久| 麻豆精品精品国产自在97香蕉| 在线观看日韩av电影| 欧美黑人一区二区三区| 欧美激情91| 亚洲综合清纯丝袜自拍| 亚洲综合精品四区| 国产真实精品久久二三区| 欧美肥婆bbw| 亚洲黄色成人| 噜噜噜久久亚洲精品国产品小说| 午夜在线成人av| 在线观看视频一区二区| 欧美激情麻豆| 欧美婷婷六月丁香综合色| 欧美一级艳片视频免费观看| 午夜免费电影一区在线观看| 一区精品在线| 亚洲精品小视频| 国产精品一区三区| 卡通动漫国产精品| 欧美国产大片| 欧美在线日韩| 久久视频一区| 亚洲在线一区| 亚洲在线视频观看| 一区二区三区福利| 一区二区高清在线| 国产精品亚洲综合| 欧美成人精品影院| 欧美日韩大片| 亚洲欧美在线x视频| 久久久久**毛片大全| 一本色道婷婷久久欧美| 亚洲视频一区二区免费在线观看| 国产一区91精品张津瑜| 亚洲国产美女久久久久| 国产精品性做久久久久久| 欧美xart系列高清| 国产欧美午夜| 日韩视频一区二区在线观看 | 亚洲欧美视频在线观看视频| 亚洲一区二区三区欧美| 亚洲第一页在线| 亚洲素人在线| 亚洲精品中文字| 久久久久国产精品一区三寸| 午夜日韩在线| 欧美午夜精品久久久久久孕妇 | 性欧美超级视频| 一区二区三区四区五区视频| 欧美成人午夜激情| 亚洲欧美日韩国产中文在线| 在线观看亚洲| 性欧美超级视频| 亚洲欧洲av一区二区三区久久| 欧美大色视频| 巨乳诱惑日韩免费av| 国产精品久久久久久久久免费樱桃 | 久久免费午夜影院| 欧美在线一二三四区| 欧美日韩精品一区视频| 亚洲人成小说网站色在线| 亚洲福利视频专区| 亚洲永久视频| 欧美一区二区日韩一区二区| 亚洲福利国产精品| 欧美专区在线播放| 久久精品午夜| 国产一区二区中文| 性做久久久久久免费观看欧美| 亚洲性图久久| 欧美性淫爽ww久久久久无| 亚洲精品视频在线看| 一本久久综合亚洲鲁鲁| 欧美另类在线播放| 亚洲美女区一区| 亚洲香蕉成视频在线观看| 欧美日韩无遮挡| 亚洲在线免费观看| 久久人人爽人人爽| 一区二区三区黄色| 欧美一区在线视频| 国产精品久久久久久影院8一贰佰| 亚洲理论在线观看| 一二三四社区欧美黄| 欧美少妇一区二区| 亚洲视频电影图片偷拍一区| 午夜精品久久久久久99热软件| 国产精品亚洲第一区在线暖暖韩国| 一区二区三区视频免费在线观看 | 欧美日韩亚洲天堂| 亚洲香蕉成视频在线观看 | 亚洲欧洲综合另类在线| 国产精品99久久久久久久女警| 欧美三级乱人伦电影| 西西裸体人体做爰大胆久久久| 久久综合久久88| 亚洲无限av看| 一区在线播放视频| 欧美视频一区二区三区…| 午夜亚洲影视| 亚洲人成高清| 欧美一区二区在线免费播放| 尹人成人综合网| 欧美日韩免费| 久久午夜国产精品| 亚洲一区二区av电影| 欧美高清不卡在线| 欧美亚洲一区二区在线| 91久久国产精品91久久性色| 国产精品久久久久77777| 老巨人导航500精品| 亚洲综合不卡| 99xxxx成人网| 亚洲黄色片网站| 久久裸体艺术| 香蕉久久精品日日躁夜夜躁| 亚洲精品日韩综合观看成人91| 国产精品区免费视频| 欧美国产日韩亚洲一区| 久久久久久久久久码影片| 亚洲午夜日本在线观看| 亚洲国产高清自拍| 久久影视三级福利片| 亚洲精品一级| 国产精品视频成人| 欧美极品一区| 另类国产ts人妖高潮视频| 性xx色xx综合久久久xx| 一区二区三区欧美在线观看|