C++ 如何在C++;它公开了一个返回对象的函数?
我有一个WCF(C#应用程序)应用程序,它调用C++COM Dll。现在C++所公开的方法具有以下签名。C++ 如何在C++;它公开了一个返回对象的函数?,c++,dll,com,idl,C++,Dll,Com,Idl,我有一个WCF(C#应用程序)应用程序,它调用C++COM Dll。现在C++所公开的方法具有以下签名。 STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT long *pVal) 现在,我想返回一个具有多个属性的接口,而不是返回一个long*pVal。差不多- STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT IData *pVal)
STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT long *pVal)
现在,我想返回一个具有多个属性的接口,而不是返回一个long*pVal。差不多-
STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT IData *pVal)
那么对于新接口,我应该如何更新COM DLL?因此,我应该在IDL文件中为IData接口添加一个新条目。对于这个COM+C++ DLL,我是新手。< p>您需要在IDL中有一个函数(假设您的接口是IMESAGEGETCROL): 或者,如果希望选项返回long或对象
interface IMessageControl
{
STDMETHOD(CallMe)(eEventType eventTypeVal, [out,retval] VARIANT* pVal);
}
<你的C++代码将是类似的:
STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, IData** pVal)
{
return E_NOTIMPL;
}
或用于变体版本
STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, VARIANT* pVal)
{
return E_NOTIMPL;
}
显然,一旦实现,返回S_OK表示正确返回,或返回E_type错误代码表示失败。如果IData表示接口,则应该在idl中声明它,就像其他接口一样(这样idl编译器可以编译它)。您可以在同一个.idl或另一个.idl中定义它并包含它。@SimonMourier好的,但是您能给我一个示例,比如在idl文件中编写像IData这样的接口的方法是什么,它将有两个属性,比如DriverName和DriverId,并且是字符串类型吗?您有现有的idl吗?属性是dispinterface的概念,而不是interface(其中所有内容都是一个方法):
STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, VARIANT* pVal)
{
return E_NOTIMPL;
}