求助:关于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