【问题标题】:component object model Automation组件对象模型自动化
【发布时间】:2018-04-13 03:25:08
【问题描述】:

我想用 COM 接口调用一个软件的对象。我的对象中的方法如图所示,我的代码如下:

::CLSIDFromProgID(OLESTR("SGNSAutomation.SGNSApplication"), &clsid);
IID iid;

  HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, 
  IID_IDispatch, (LPVOID*)&pWMPDispatch);
  IDispatch * pdisp = (IDispatch *)NULL;
  DISPID dispid;
   DISPPARAMS params = {NULL};
    OLECHAR * Name = OLESTR("addSimulationCase","getSimulationCase","importCase","openCase","registeredBoundaryEquipmentsList","registeredCorrelaionsList","registeredEquipmentsList","removeSimulationCase");
 HRESULT hresult =pWMPDispatch->GetIDsOfNames(IID_NULL, &Name,8,LOCALE_SYSTEM_DEFAULT,&dispid);
 hresult =pWMPDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, NULL, NULL,
                          NULL);  
  //pdisp IDispatch
_ASSERT(hr==S_OK);

但发生错误我认为是因为名称变量定义 我的对象中的方法列表是:

addSimulationCase
getSimulationCase
importCase
openCase
registeredBoundaryEquipmentsList
registeredCorrelaionsList
registeredEquipmentsList
removeSimulationCase

请帮我如何定义指针名称。

【问题讨论】:

    标签: automation com


    【解决方案1】:

    GetIDsOfNames 这个名字有点混乱。就像您尝试做的那样,您似乎可以一次查询具有多个函数名称的对象。不是这种情况。您只能查询单个函数名称。来自the documentation

    当使用多个名称调用 GetIDsOfNames 时,第一个名称 (rgszNames[0]) 对应成员名,后面的名字 对应成员的参数名称。

    您需要为每个要调用的函数单独调用GetIDsOfNames

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 2018-09-18
      • 2015-11-10
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      相关资源
      最近更新 更多