使用C+;从COM对象读取GUID属性+;建设者

使用C+;从COM对象读取GUID属性+;建设者,com,c++builder,Com,C++builder,我有一个正在使用的第三方COM对象。基本上没问题,但我一直在从对象读取GUID属性 自动生成的组件包装器/头的相关部分如下所示: // *********************************************************************// // DispIntf: IFoo // Flags: (4416) Dual OleAutomation Dispatchable // GUID: {5DE5DAAF-5419-4B2B-9771

我有一个正在使用的第三方COM对象。基本上没问题,但我一直在从对象读取GUID属性

自动生成的组件包装器/头的相关部分如下所示:

// *********************************************************************//
// DispIntf:  IFoo
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {5DE5DAAF-5419-4B2B-9771-58EAEE780799}
// *********************************************************************//
template<class T>
class IFooDispT : public TAutoDriver<IFoo>
{
  ...
BSTR    __fastcall get_FileName(void);
HRESULT __fastcall get_ProjectGUID(/*AUTO_PARAM_ERROR(System::TGUID* Value)*/ VARIANT*  Value);
HRESULT __fastcall get_ProjectName(BSTR* Value/*[out,retval]*/);

__property   BSTR  FileName = {read = get_FileName};
__property   BSTR  ProjectName = {read = get_ProjectName};

我已经从Delphi测试了同一个对象(尽管没有使用上面显示的后期绑定),我很高兴COM对象本身没有错

试着这样称呼它:

// *********************************************************************//
// DispIntf:  IFoo
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {5DE5DAAF-5419-4B2B-9771-58EAEE780799}
// *********************************************************************//
template<class T>
class IFooDispT : public TAutoDriver<IFoo>
{
  ...
BSTR    __fastcall get_FileName(void);
HRESULT __fastcall get_ProjectGUID(/*AUTO_PARAM_ERROR(System::TGUID* Value)*/ VARIANT*  Value);
HRESULT __fastcall get_ProjectName(BSTR* Value/*[out,retval]*/);

__property   BSTR  FileName = {read = get_FileName};
__property   BSTR  ProjectName = {read = get_ProjectName};
TAutoDriver-foo;
// ...
GUID;
memset(&guid,0,sizeof(guid));
//使用->访问原始双界面
HRESULT hr=foo->get\u ProjectGUID(&guid);

您能用OleView显示TLB IDL的相关部分吗?COM对象本身有故障。dispinterface的方法需要可以使用IDispatch::Invoke()调用。这要求方法的参数和返回值可以存储在变量中。不能在变量中存储GUID。它实际上不是dispinterface,它具有[dual]属性。您只能调用方法early bound。