zoukankan      html  css  js  c++  java
  • COM调用

    一、BCB

    (1)导入模式

    1、Component-》Import Component...-》Import a Type Library-》...

    2、#include "xxx_TLB.h"

    3、调用

    CoInitialize(NULL);

    IxxxDisp xxx;

    xxx.BindDefault();

    xxx.Method1();

    CoUninitialize();

    (2)自动化模式

    CoInitialize(NULL);

    Variant xxx = Variant::CreateObject("xxx.xxx");

    Ret = xxx.OleFunction("Method1",...);

    CoUninitialize();

    注:BSTR*传出参数可以使用WideString类型,例如:Ret = xxx.OleFunction("Method1",&wsErrorMsg)。

    (3)标准模式

    1、创建对象

    long CreateInstance(
        BSTR* pbstrErrorMsg_Out)                // 返回的错误信息
    {
        long lResult = R_SUCCESS;
    
        HRESULT hr;
        CLSID clsid;
        hr = CLSIDFromProgID(L"xxx.xxx", &clsid);
        if (FAILED(hr))
        {
            lResult = R_ERROR;
            *pbstrErrorMsg_Out = SysAllocString(L"xxx.xxx");
        }
        else
        {
            hr = CoCreateInstance(
                clsid,
                NULL,
                CLSCTX_INPROC_SERVER,
                IID_IDispatch,
                (void**)&xxx);
            if (FAILED(hr))
            {
                lResult = R_ERROR;
                *pbstrErrorMsg_Out = SysAllocString(L"xxx.xxx");
            }
        }
    
        return lResult;
    }

    2、调用接口

    // 初始化系统
    long InitSystem(
        BSTR bstrUserName_In,                   // 用户名
        BSTR bstrPassword_In,                   // 密码
        BSTR* pbstrErrorMsg_Out)                // 返回的错误信息
    {
        long lResult = R_SUCCESS;
    
        DISPPARAMS dispparams;
        try
        {
            HRESULT hr;
            DISPID dispid;
            LPOLESTR func = L"InitSystem";
            hr = xxx->GetIDsOfNames(
                IID_NULL,
                &func,
                1,
                GetUserDefaultLCID(),
                &dispid);
            if (FAILED(hr))
            {
                lResult = R_ERROR;
            }
            else
            {
                VARIANT vResult;
                memset(&dispparams,0,sizeof dispparams);
                dispparams.cArgs = 3;
                dispparams.cNamedArgs = 0;
                dispparams.rgvarg = new VARIANT[dispparams.cArgs];
                dispparams.rgvarg[2].vt = VT_BSTR;
                dispparams.rgvarg[2].bstrVal = bstrUserName_In;
                dispparams.rgvarg[1].vt = VT_BSTR;
                dispparams.rgvarg[1].bstrVal = bstrPassword_In;
                dispparams.rgvarg[0].vt = VT_BYREF|VT_BSTR;
                dispparams.rgvarg[0].pbstrVal = pbstrErrorMsg_Out;
                hr = xxx->Invoke(
                    dispid,
                    IID_NULL,
                    GetUserDefaultLCID(),
                    DISPATCH_METHOD,
                    &dispparams,
                    &vResult,
                    NULL,
                    NULL);
                if (FAILED(hr))
                {
                    lResult = R_ERROR;
                }
                else
                {
                    lResult = vResult.lVal;
                    if (lResult == R_SUCCESS)
                        m_lSystemCount++;
                }
            }
        }
        catch(...)
        {
            DELETEARRAY(dispparams.rgvarg)
            throw;
        }
        DELETEARRAY(dispparams.rgvarg)
    
        return lResult;
    }

    3、释放对象

    void ReleaseInstance()
    {
        if (xxx)
        {
            xxx->Release();
            xxx = NULL;
        }
    }

    二、MFC

    1、Add-》Class...-》MFC-》MFC Class From TypeLib->...

    2、#include "Cxxx.h"

    3、调用

    CoInitialize(NULL);

    Cxxx xxx;

    xxx.CreateDispatch("atl.xxx.1"); // ProgID

    xxx.Method1();

    xxx.ReleaseDispatch();

    CoUninitialize();

    三、C#

    1、Add Reference...-》COM-》...

    2、using ...

    3、调用

    Ixxx x = new xxxClass();

    x.Method1();

  • 相关阅读:
    ORACLE学习-1.过滤和排序
    Java-net.sf.json.JSONException: java.lang.reflect.InvocationTargetException处理方法之一
    ORACLE
    java日常-com.alibaba.fastjson快速处理json字符串转成list类型
    java日常-List、Map初始值
    javaScript中获取时间
    获取select的option值及其文本
    java日常-通过年月,获取到月的第一天和最后一天
    sybase powerdesigner 16.5注册码
    05-Docker私有仓库
  • 原文地址:https://www.cnblogs.com/plus/p/2397760.html
Copyright © 2011-2022 走看看