vs2008 ATL 連接點

Posted on 星期三, 四月 18th, 2012 at 上午 2:54

利用VS2008 創建ATL簡單對象,並提供給web訪問接口,以及事件回調,下面共有21張截圖(爲美觀每頁一張)用以演示。

1.創建ATL工程

 

 

 

 

2.默認選擇DLL模式

 

 

3.爲工程添加ATL類

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. 選擇ATL簡單對象

 

 

 

 

 

 

 

 

5. 執行嚮導,請留意coclass和ProgId

 

 

 

6. 選擇 單元,雙重,聚合,連接點

 

 

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_
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章