У меня есть метод, определенный в IDL следующим образом:Возвращение S_FALSE из DLL C# COM
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)
Я понимаю, что это происходит потому, что [вне, RET val] используется как возвращаемый тип вместо HRESULT, как в C++. Есть ли простой способ вернуть значения S_OK/S_FALSE без изменения определения метода? Единственный способ, которым я могу видеть, что я должен использовать ILDASM/ILASM добавить preservesig, так что я в конечном итоге с чем-то вроде этого:
public int GetNextFunction(ref int nID, ref int lPos, ref string bstrName)
мне было интересно, есть ли какой-то другой путь, не делая шаг иль компиляции.
Спасибо. Это сделало то, что я хотел. Было бы неплохо, если бы эти функции были в стандартной программе VS2008/VS2010 RC tlbimp. – AntonyW