• <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  評論-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.構造函數:
            參數(字符串常量):工程名.類名
            2.Invoke:
            參數1(字符串常量):函數名
            參數2(VARIANT數組):調用參數,從右至左
            參數3(數值常量):調用參數個數
            參數4(VARIANT指針):返回值
            3.ToVARIANT:將給定參數轉換為VARIANT類型
            4.ToVARIANT_ByRef:將給定參數轉換為ByRef的VARIANT類型
            5.ToBSTR:將給定ByRef的VARIANT轉換為BSTR
            6.ToInt:將給定ByRef的VARIANT轉換為int
            7.ToBool:將給定ByRef的VARIANT轉換為bool
            8.ToDouble:將給定ByRef的VARIANT轉換為double
            9.ToBSTR:將給定字符串常量轉換為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 閱讀(792) 評論(0)  編輯 收藏 引用 所屬分類: QLanguage
            嫩草伊人久久精品少妇AV| 99久久人人爽亚洲精品美女| 久久午夜无码鲁丝片午夜精品| 精品久久久久久无码国产| 欧美久久亚洲精品| 久久亚洲国产成人精品性色| 狠色狠色狠狠色综合久久| 久久精品中文字幕有码| 久久精品国产亚洲AV香蕉| .精品久久久麻豆国产精品| 思思久久99热免费精品6| 久久99热只有频精品8| 欧美精品一区二区久久| 九九精品99久久久香蕉| 亚洲日本久久久午夜精品| 久久国产成人精品麻豆| 久久久久久精品免费免费自慰| 国产99久久久国产精免费| 日韩精品无码久久久久久| 久久久久亚洲AV成人网人人软件| 久久久久人妻一区精品性色av | 亚洲国产小视频精品久久久三级| 日韩精品久久无码人妻中文字幕 | 欧美激情精品久久久久久久 | 久久综合亚洲色HEZYO国产| 久久夜色精品国产噜噜麻豆| 一本色综合久久| 欧美国产精品久久高清| 精品一久久香蕉国产线看播放 | 国产成人久久久精品二区三区| 亚洲中文字幕久久精品无码喷水 | 久久精品亚洲福利| 99久久精品国产一区二区| 精品久久久久久亚洲| 久久青青草原精品影院| 国产精品一久久香蕉国产线看| 色欲综合久久中文字幕网 | 久久精品国产亚洲av瑜伽| 青青草原综合久久大伊人精品| 久久精品国产亚洲欧美| 亚洲国产精品久久久久婷婷老年|