TComponent::GetIDsOfNames - C++ Builder

C++ Builder 参考手册 ➙ TComponent ➙ GetIDsOfNames


头文件:#include
命名空间:System::Classes
类:TComponent
访问权限:protected:
函数原型:

HRESULT __stdcall GetIDsOfNames(
    const GUID &IID, 
    void * Names, 
    int NameCount, 
    int LocaleID, 
    void * DispIDs);

System::Classes::TComponent::GetIDsOfNames 是 System::Classes::TComponent 的成员函数,通过名字获取 DISPID,用于调用 Invoke 方法。

参数:

  • IID:预留参数,必须用 IID_NULL;
  • Names:字符串数组,这个参数实际上是 wchar_t ** 类型的;
  • NameCount:Names 数组里面的字符串个数
  • LocaleID:区域和语言,可以用 GetThreadLocale 获取当前线程的区域和语言,也可以用 MAKELCID 生成,或者使用 LOCALE_SYSTEM_DEFAULT 等;
  • DispIDs:传入 DISPID 的地址/数组,用于返回获取到的 DISPID

返回值:

COM 调用的返回值,如果小于零,表示执行有错误,

返回值 说明
S_OK 成功
E_OUTOFMEMORY 内存不足
DISP_E_UNKNOWNNAME 至少有一个名字不存在,
对应的 DISPID 会返回 DISPID_UNKNOWN
DISP_E_UNKNOWNLCID 区域不存在
  • 把 COM 接口的属性、方法和参数的名字转为 DISPID,DISPID 就是调用 IDispatch::Invoke 使用的属性、方法和参数的 ID;
  • 如果封装的是 IDispatch 会实现 IDispatch 的 GetIDsOfNames;
  • 可以用 System::Win::Comobj::OleCheck 判断返回值是否有错误,如果有错误,会抛出 EOleSysError 异常。

例:

LPCWSTR name = L"FuncName";
LCID lcid = GetThreadLocale();
DISPID id;
HRESULT hr = GetIDsOfNames(IID_NULL, (LPWSTR*)(&name), 1, lcid, &id);
System::Win::Comobj::OleCheck(hr);

参考:

  • System::Classes::TComponent::Invoke
  • System::Classes::TComponent::BeginInvoke
  • System::Classes::TComponent::EndInvoke
  • System::Classes::TComponent::EndFunctionInvoke
  • System::Classes::TComponent::GetTypeInfo
  • System::Classes::TComponent::GetTypeInfoCount
  • System::Classes::TComponent
  • System::Classes::TPersistent
  • System::TObject
  • VCL 类继承关系

C++ Builder 参考手册 ➙ TComponent ➙ GetIDsOfNames

你可能感兴趣的:(TComponent::GetIDsOfNames - C++ Builder)