• <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>
            隨筆-91  評(píng)論-137  文章-0  trackbacks-0
            COM.h:
             1 #pragma once
             2 #include <atlcomcli.h>
             3 
             4 class COMMacro
             5 {
             6 public:
             7     COMMacro(LPTSTR Object);
             8     ~COMMacro();
             9     BOOL Invoke(LPTSTR strFunction,VARIANT* pVarParams,int nParamterCount,VARIANT* pResult);
            10     VARIANT ToVARIANT(BSTR str);
            11     VARIANT ToVARIANT(int nVal);
            12     VARIANT ToVARIANT(bool bVal);
            13     VARIANT ToVARIANT(double dVal);
            14     VARIANT ToVARIANT_ByRef(BSTR* pStr);
            15     VARIANT ToVARIANT_ByRef(int* pnVal);
            16     VARIANT ToVARIANT_ByRef(bool* pbVal);
            17     VARIANT ToVARIANT_ByRef(double* pdVal);
            18     BSTR ToBSTR(VARIANT Val);
            19     int ToInt(VARIANT Val);
            20     bool ToBool(VARIANT Val);
            21     double ToDouble(VARIANT Val);
            22 
            23     BOOL ToBSTR(LPTSTR src,BSTR& dest);
            24 protected:
            25     CLSID m_clsID;
            26     CComPtr<IUnknown> m_Unknown;
            27     CComDispatchDriver* m_pDispatchDriver;
            28 };
            COM.cpp:
              1 #include "stdafx.h"
              2 #include "COM.h"
              3 #include <comdef.h>
              4 
              5 COMMacro::COMMacro(LPTSTR Object)
              6 {
              7     HRESULT hr = CLSIDFromProgID(Object,&m_clsID);
              8     if(FAILED(hr))
              9     {
             10         throw _com_error(hr);
             11         return;
             12     }
             13     hr = CoCreateInstance(m_clsID,NULL,CLSCTX_ALL,IID_IUnknown,(LPVOID*)&m_Unknown);
             14     if(FAILED(hr))
             15     {
             16         throw _com_error(hr);
             17         return;
             18     }
             19     m_pDispatchDriver = new CComDispatchDriver(m_Unknown);
             20 }
             21 
             22 COMMacro::~COMMacro()
             23 {
             24     delete m_pDispatchDriver;
             25 }
             26 
             27 BOOL COMMacro::Invoke(LPTSTR strFunction,VARIANT* pVarParams,int nParamterCount,VARIANT* pResult)
             28 {
             29     DISPID DispID;
             30     HRESULT hr = m_pDispatchDriver->GetIDOfName(strFunction,&DispID);
             31     if(FAILED(hr))
             32     {
             33         throw _com_error(hr);
             34         return FALSE;
             35     }
             36     hr = m_pDispatchDriver->InvokeN(DispID,pVarParams,nParamterCount,pResult);
             37     if(FAILED(hr))
             38     {
             39         throw _com_error(hr);
             40         return FALSE;
             41     }
             42     return TRUE;
             43 }
             44 
             45 VARIANT COMMacro::ToVARIANT(BSTR str)
             46 {
             47     VARIANT vResult;
             48     vResult.vt = VT_BSTR;
             49     vResult.bstrVal = SysAllocString(str);
             50     return vResult;
             51 }
             52 
             53 VARIANT COMMacro::ToVARIANT(int nVal)
             54 {
             55     VARIANT vResult;
             56     vResult.vt = VT_I4;
             57     vResult.intVal = nVal;
             58     return vResult;
             59 }
             60 
             61 VARIANT COMMacro::ToVARIANT(bool bVal)
             62 {
             63     VARIANT vResult;
             64     vResult.vt = VT_BOOL;
             65     vResult.boolVal = bVal;
             66     return vResult;
             67 }
             68 
             69 VARIANT COMMacro::ToVARIANT(double dVal)
             70 {
             71     VARIANT vResult;
             72     vResult.vt = VT_R8;
             73     vResult.dblVal = dVal;
             74     return vResult;
             75 }
             76 
             77 VARIANT COMMacro::ToVARIANT_ByRef(BSTR* pStr)
             78 {
             79     VARIANT vResult;
             80     vResult.vt = VT_BSTR | VT_BYREF;
             81     vResult.byref = pStr;
             82     return vResult;
             83 }
             84 
             85 VARIANT COMMacro::ToVARIANT_ByRef(int* pnVal)
             86 {
             87     VARIANT vResult;
             88     vResult.vt = VT_I4 | VT_BYREF;
             89     vResult.byref = pnVal;
             90     return vResult;
             91 }
             92 
             93 VARIANT COMMacro::ToVARIANT_ByRef(bool* pbVal)
             94 {
             95     VARIANT vResult;
             96     vResult.vt = VT_BOOL | VT_BYREF;
             97     vResult.byref = pbVal;
             98     return vResult;
             99 }
            100 
            101 VARIANT COMMacro::ToVARIANT_ByRef(double* pdVal)
            102 {
            103     VARIANT vResult;
            104     vResult.vt = VT_BOOL | VT_BYREF;
            105     vResult.byref = pdVal;
            106     return vResult;
            107 }
            108 
            109 BSTR COMMacro::ToBSTR(VARIANT Val)
            110 {
            111     return *(BSTR*)Val.byref;
            112 }
            113 
            114 int COMMacro::ToInt(VARIANT Val)
            115 {
            116     return *(int*)Val.byref;
            117 }
            118 
            119 bool COMMacro::ToBool(VARIANT Val)
            120 {
            121     return *(bool*)Val.byref;
            122 }
            123 
            124 double COMMacro::ToDouble(VARIANT Val)
            125 {
            126     return *(double*)Val.byref;
            127 }
            128 
            129 BOOL COMMacro::ToBSTR(LPTSTR src,BSTR& dest)
            130 {
            131     dest = SysAllocString(src);
            132     return TRUE;
            133 }

            使用說明:
            1.構(gòu)造函數(shù):
            參數(shù)(字符串常量):工程名.類名
            2.Invoke:
            參數(shù)1(字符串常量):函數(shù)名
            參數(shù)2(VARIANT數(shù)組):調(diào)用參數(shù),從右至左
            參數(shù)3(數(shù)值常量):調(diào)用參數(shù)個(gè)數(shù)
            參數(shù)4(VARIANT指針):返回值
            3.ToVARIANT:將給定參數(shù)轉(zhuǎn)換為VARIANT類型
            4.ToVARIANT_ByRef:將給定參數(shù)轉(zhuǎn)換為ByRef的VARIANT類型
            5.ToBSTR:將給定ByRef的VARIANT轉(zhuǎn)換為BSTR
            6.ToInt:將給定ByRef的VARIANT轉(zhuǎn)換為int
            7.ToBool:將給定ByRef的VARIANT轉(zhuǎn)換為bool
            8.ToDouble:將給定ByRef的VARIANT轉(zhuǎn)換為double
            9.ToBSTR:將給定字符串常量轉(zhuǎn)換為BSTR類型

            示例:
             1     CoInitialize(0); // 初始化ATL
             2     try
             3     {
             4         COMMacro m(L"aaa.bbb");
             5         VARIANT vResult,vParams[3];
             6         int i = 100;
             7         BSTR str;
             8         m.ToBSTR(L"abc",str);
             9         vParams[2= m.ToVARIANT(123.456);
            10         vParams[1= m.ToVARIANT(i);
            11         vParams[0= m.ToVARIANT_ByRef(&str);
            12         m.Invoke(L"aaa",vParams,3,&vResult);
            13         wprintf(L"%s\n",m.ToBSTR(vParams[0]));
            14     }
            15     catch(_com_error& e)
            16     {
            17         wprintf(L"%s\n",e.ErrorMessage());
            18     }
            posted on 2010-11-20 22:40 lwch 閱讀(786) 評(píng)論(0)  編輯 收藏 引用 所屬分類: QLanguage
            久久一区二区免费播放| 91麻精品国产91久久久久 | 2021精品国产综合久久| 午夜欧美精品久久久久久久| 久久婷婷国产综合精品| 久久精品国产精品亚洲下载| 亚洲va国产va天堂va久久| 7国产欧美日韩综合天堂中文久久久久| 久久国产精品二国产精品| 无码专区久久综合久中文字幕| .精品久久久麻豆国产精品| 久久无码中文字幕东京热| 97r久久精品国产99国产精| 尹人香蕉久久99天天拍| 伊人久久大香线焦综合四虎| 综合网日日天干夜夜久久| 亚洲国产天堂久久综合网站 | 久久精品www| 精品国产青草久久久久福利| 国产农村妇女毛片精品久久| 久久免费的精品国产V∧| 日韩精品久久久久久久电影| 久久久久一区二区三区| 欧美一区二区三区久久综| 亚洲人成电影网站久久| 久久精品国产福利国产琪琪| 久久久无码一区二区三区| 日本欧美国产精品第一页久久| 韩国三级大全久久网站| 伊人久久精品无码二区麻豆| 欧美成a人片免费看久久| 国产激情久久久久影院小草 | 久久久久久国产精品无码下载| 久久精品夜色噜噜亚洲A∨| 91久久精品视频| 国产精品九九久久免费视频| 免费观看成人久久网免费观看| 99久久精品国内| 国产A级毛片久久久精品毛片| 国产亚洲精品美女久久久| 国产麻豆精品久久一二三|