古之成大事者,不唯有超世之才,亦唯有堅(jiān)韌不拔之志也!

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            3 隨筆 :: 44 文章 :: 1 評(píng)論 :: 0 Trackbacks

          在com組件的制作過(guò)程中 對(duì)接口參數(shù)的調(diào)整是難以避免的,如果不知道就會(huì)有許多的問(wèn)題
          比較顯示的修改有 ctl.h  ctl.cpp odl 文件
          但容易忽略的是 ctl.cpp中的DISP_FUNCTION 宏也需要修改
          DISP_FUNCTION(CUnbankCtrl, "send", send, VT_I2, VTS_BSTR VTS_BSTR)
          這個(gè)表示 輸出為short 輸入為兩個(gè)bstr。增加一個(gè)bstr這里就要改為如下:

          DISP_FUNCTION(CUnbankCtrl, "send", send, VT_I2, VTS_BSTR VTS_BSTR VTS_BSTR)


          對(duì)于第一次編寫(xiě)ocx接口還是容易出很多錯(cuò)誤的。(我就上次寫(xiě)過(guò)這次寫(xiě)還是碰到很多問(wèn)題)

          1:在odl文件中定義

           1     dispinterface _DSyncLink
           2     {
           3         properties:
           4             // NOTE - ClassWizard will maintain property information here.
           5             //    Use extreme caution when editing this section.
           6             //{{AFX_ODL_PROP(CSyncLinkCtrl)
           7             //}}AFX_ODL_PROP
           8 
           9         methods:
          10             // NOTE - ClassWizard will maintain method information here.
          11             //    Use extreme caution when editing this section.
          12             //{{AFX_ODL_METHOD(CSyncLinkCtrl)
          13             [id(1)] short sendMsg(BSTR fileName,BSTR name,BSTR signStr); 
          14             [id(2)] short testOcx(BSTR str);
          15             //}}AFX_ODL_METHOD
          16             
          17 
          18             [id(DISPID_ABOUTBOX)] void AboutBox();
          19     };

          2:在ctl.h 文件中定義
            
          1     DECLARE_MESSAGE_MAP()
          2 
          3 // Dispatch maps
          4     //{{AFX_DISPATCH(CSyncLinkCtrl)
          5     afx_msg short sendMsg(LPCTSTR fileName,LPCTSTR name,LPCTSTR signStr);
          6     afx_msg short testOcx(LPCTSTR str);
          7     //}}AFX_DISPATCH
          8     DECLARE_DISPATCH_MAP()

           1 // Dispatch and event IDs
           2 public:
           3     enum {
           4         
           5     //{{AFX_DISP_ID(CSyncLinkCtrl)
           6     eventidResult = 1L,
           7     dispidSendMsg = 2L,
           8     dispidTestOcx = 3L,
           9     //}}AFX_DISP_ID
          10     };
          11 };

          3:ctl.cpp文件中定義
          BEGIN_DISPATCH_MAP(CSyncLinkCtrl, COleControl)
              
          //{{AFX_DISPATCH_MAP(CSyncLinkCtrl)
              DISP_FUNCTION(CSyncLinkCtrl, "sendMsg", sendMsg, VT_I2, VTS_BSTR VTS_BSTR VTS_BSTR)
              DISP_FUNCTION(CSyncLinkCtrl, 
          "testOcx", testOcx, VT_I2,VTS_BSTR)
              
          //}}AFX_DISPATCH_MAP
              DISP_FUNCTION_ID(CSyncLinkCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
          END_DISPATCH_MAP()

          short CSyncLinkCtrl::testOcx(LPCTSTR str) 
          {
                  
          return 8;
                  
          }

          4:聲明安全ocx安全

           
            






          posted on 2008-05-16 10:51 goto 閱讀(2447) 評(píng)論(0)  編輯  收藏 所屬分類: C and C++

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 韶山市| 恩平市| 镇赉县| 崇义县| 集安市| 巫溪县| 石楼县| 英德市| 汶川县| 兴安盟| 清苑县| 乾安县| 尚志市| 漠河县| 盘锦市| 垦利县| 昔阳县| 藁城市| 蒲江县| 博兴县| 泸溪县| 东台市| 宝山区| 马公市| 柳州市| 清河县| 株洲市| 遵化市| 曲阜市| 关岭| 四会市| 涿州市| 兴城市| 黄大仙区| 永春县| 犍为县| 城市| 密云县| 行唐县| 盘锦市| 永泰县|