我有一个在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]作为返回类型而不是C++中的HRESULT。有没有简单的方法在不更改方法定义的情况下返回S_OK / S_FALSE值?我唯一能想到的方式是使用ildasm / ilasm添加preservesig,以便最终得到如下结果:
public int GetNextFunction(ref int nID, ref int lPos, ref string bstrName)
我在想是否有其他方法可以避免进行 il 编译步骤。