我在IDL定义的方法如下:从C#COM DLL返回S_FALSE
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]被用作返回类型而不是C++中的HRESULT。有没有一种简单的方法可以在不改变方法定义的情况下返回S_OK/S_FALSE值?我能看到的唯一方法是,我必须使用ILDASM/ILASM添加preservesig所以我最终是这样的:
public int GetNextFunction(ref int nID, ref int lPos, ref string bstrName)
我想知道是否有没有做的IL编译步骤一些其他的方式。
谢谢。那做了我想要的。如果这些功能都在标准VS2008/VS2010 RC tlbimp程序中,那将会很不错。 – AntonyW 2010-04-07 15:10:07