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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            3 隨筆 :: 44 文章 :: 1 評論 :: 0 Trackbacks

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

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


          對于第一次編寫ocx接口還是容易出很多錯誤的。(我就上次寫過這次寫還是碰到很多問題)

          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 閱讀(2441) 評論(0)  編輯  收藏 所屬分類: C and C++

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 开化县| 东乌珠穆沁旗| 玉龙| 平山县| 太仆寺旗| 阿巴嘎旗| 永登县| 洱源县| 肃宁县| 茂名市| 镶黄旗| 柳江县| 舟曲县| 沽源县| 彩票| 彰化县| 夏河县| 甘洛县| 浦北县| 行唐县| 元谋县| 惠州市| 桐庐县| 阳曲县| 巴青县| 宣汉县| 平度市| 林甸县| 紫阳县| 桑植县| 龙游县| 巴林左旗| 若尔盖县| 浮山县| 瑞金市| 泾川县| 望江县| 理塘县| 洛浦县| 敖汉旗| 鹤岗市|