У меня есть метод, определенный в IDL следующим образом:
interface IMyFunc : IDispatch
{
[id(1), helpstring("method GetNextFunction")] HRESULT GetNextFunction(
[in,out] long* lPos, [out, retval] BSTR* bstrName);
}
Используя C ++, я всегда реализовывал это следующим образом:
STDMETHODIMP CMyFunc::GetNextFunction(long *nID, long *lPos, BSTR *bstrName)
{
if ( function to return )
{
// setup return values;
return S_OK;
}
else
{
// just exit
return S_FALSE;
}
}
Теперь я реализую это в C # и использовалtlbimp для библиотеки типов и в итоге:
public string GetNextFunction(ref int nID, ref int lPos)
Я понимаю, что это потому, что [out, retval] используется в качестве возвращаемого типа вместо HRESULT, как в C ++.Есть ли простой способ вернуть значения S_OK / S_FALSE без изменения определения метода?Единственный способ понять, что мне нужно использовать ildasm / ilasm для добавления preserveig, поэтому я получаю что-то вроде этого:
public int GetNextFunction(ref int nID, ref int lPos, ref string bstrName)
Мне было интересно, был ли какой-то другой способ без компиляции ilшаг.