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)
これは、C ++のようにHRESULTではなく、[out、retval]が戻り型として使用されているためだと理解しています。メソッド定義を変更せずにS_OK/S_FALSE値を返す簡単な方法はありますか?私が見ることができる唯一の方法は、私がildasm / ilasmを使用してpreservesigを追加する必要があるということです。そのため、次のようになります。
public int GetNextFunction(ref int nID, ref int lPos, ref string bstrName)
ilのコンパイル手順を実行せずに他の方法があるかどうか疑問に思いました。