如何在C++中创建一个COM Dll来公开一个返回对象的函数



我有一个WCF(C#应用程序(应用程序,它调用C++COM Dll。现在,C++COM dll公开的方法具有以下签名。

STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT long *pVal)

现在,我不想返回一个长的*pVal,而是希望返回一个具有多个属性的接口。类似

STDMETHODIMP MessageControl::CallMe(eEventType eventTypeVal, OUT IData *pVal)

那么对于新接口,我应该如何更新COM DLL?那么,我应该在IDL文件中为IData接口添加一个新条目吗。我是这个COM C++Dll的新手。

您需要在IDL中有一个函数,比如(假设您的接口是IMessageControl(:

interface IMessageControl
{
STDMETHOD(CallMe)(eEventType eventTypeVal, [out,retval] IData** pVal);
}

或者如果你想选择返回长或对象

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_类型的错误代码表示失败。

最新更新