利用VS2008 創建ATL簡單對象,並提供給web訪問接口,以及事件回調,下面共有21張截圖(爲美觀每頁一張)用以演示。
1.創建ATL工程
2.默認選擇DLL模式
3.爲工程添加ATL類
5. 執行嚮導,請留意coclass和ProgId
7.在接口上添加方法
8.創建ATL接口函數
8.1默認下一步
9.在連接點的接口上創建方法(事件回調)
9.1默認下一步
9.2 默認下一步
10.在類視圖的實體類中添加連接點,並實現連接點
10.1 默認下一步
10.2 在類視圖的實體類上選擇實現連接點
10.3 默認下一步
11.切換到代碼中,將實體類的頭文件打開添加IProvideClassInfo2Impl,並將映射加入。切記要修改導出接口爲從IDispatch派生否則ATL對象的接口無法被web發現。
12.添加測試代碼
13.打開IDL文件找出 coclass的guid 已經 接口的名字,和事件的名字,這些都是web需要的 。
14.創建javascript腳本,將剛纔記錄的coclass的guid (即CLASSID)和接口,事件的名稱填入。
15. 開始測試,如果你嚴格按照我的創建流程的話,應該可以看到下面的測試截圖了。
16. 後記
1. 截圖中的工程寫錯了一個字母,若是重新來過,實在是吃不消 ,請自行將UpgradePlagIn變更爲UpgradePlugIn。
1. 如果你需要在線程中調用Fire_OnResult那麼建議你創建一個窗口,在回調中用消息通知窗口調用Fire_XXXXX。
例子如下,當然從最開始創建帶窗口的ATL控件也是好辦法。就到這裏!
#ifndef _UPGRADE_ATL_MSG_WND_H_ #define _UPGRADE_ATL_MSG_WND_H_ #include <atlbase.h> #include <atlwin.h> class CUpgrade ;
class CNotifyWnd : public CWindowImpl< CNotifyWnd, CWindow, CWinTraits< WS_OVERLAPPEDWINDOW > > { public: static const INT WM_RECEIVE_NOTIFY = WM_USER+XXXX ; CNotifyWnd() ; public: DECLARE_WND_CLASS( _T("CNotifyWnd") ) public: BEGIN_MSG_MAP( CNotifyWnd ) MESSAGE_HANDLER( WM_DESTROY, OnDestroy ) MESSAGE_HANDLER( WM_RECEIVE_NOTIFY, OnNotificationReceived ) END_MSG_MAP() public: LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled ) ; LRESULT OnNotificationReceived( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled ) ; VOID SetManagementPointer(CUpgrade* lpVM_) ; CUpgrade* _lpVM ; }; #endif//_UPGRADE_ATL_MSG_WND_H_