首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于c++ 调用COM的有关问题

2012-06-20 
求助:关于c++ 调用COM的问题现在是这样的:有个COM接口,其中有几个函数的参数是另外一个接口,不知道怎么调

求助:关于c++ 调用COM的问题
现在是这样的:
有个COM接口,其中有几个函数的参数是另外一个接口,不知道怎么调用,只有一个DLL,还有C#的调用定义,我想在C++里面调用,调用其中一个普通参数的方法是可以的,但是调用那种参数是另外一个接口的函数就失败,悲剧!求助啊!!!
C#的相关接口定义是这样的:
  [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("AD864139-4547-45e8-8981-C91F7C40AD69")]
  internal interface ITicketManager
  {
  void GetAppID(Guid productId, out ulong appId);  
  void GetTicket(ulong appID, string TicketID, out ITicket Ticket);
   
  }

[ComImport, Guid("C66A047A-F755-4515-A573-F059C29736E2"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  internal interface ITicket
  {
  [PreserveSig]
  int set_Property(uint propertyId, string propValue);
  [PreserveSig]
  int set_InvocationInfo(string TaskName, string taskParameters);
  }
[ComImport, ClassInterface(ClassInterfaceType.None), Guid("248DD447-4295-4888-BC5A-5D87F3705F74")]
  internal class TicketManager
  {
  }

现在我在C++里面动态方式调用GetAppID是没问题的,但是调用GetTicket这个函数就不行,其中ITicket Ticket参数就是下面的那个ITicket接口,拜托大家了,有什么办法没????

[解决办法]
在C++中返回指针的,如果是在函数中的话,一般用双指针
void GetTicket(ulong appID, string TicketID, ITicket** Ticket);
如果是函数返回的,就是
ITicket* Ticket GetTicket(ulong appID, string TicketID)
[解决办法]
ITicket** Ticket=NULL;
HRESULT hr3=pITicketManager->GetTicket(9530930203693022559,L"ticket1",Ticket);
错误, 改为
ITicket* Ticket;
HRESULT hr3=pITicketManager->GetTicket(9530930203693022559,L"ticket1",&Ticket);
记得Release Ticket

热点排行