ReturningS_FALSEfromC#COMdll我在IDL中定义了一个方法如下:interfaceIMyFunc:IDispatch{[id(1),helpstring("methodGetNextFunction")]HRESULTGetNextFunction([in,out]long*lPos,[out,retval]BSTR*bstrName);}使用C++,我总是按如下方式实现:返回S_OK;}else{//退出returnS_FALSE;现在我在C#中实现它并在类型库tlbimp上使用它并最终得到:publicstringGetNextFunction(refintnID,refintlPos)我知道这是因为[out,retval]被用作返回类型而不是HRESULT就像在C++中一样。有没有一种简单的方法可以在不更改方法定义的情况下返回S_OK/S_FALSE值?我能看到的唯一方法是我必须使用ildasm/ilasm添加preservesig,所以我最终得到这样的结果:publicintGetNextFunction(refintnID,refintlPos,refstringbstrName)我想知道是否还有另一个没有il编译步骤完成。尝试将/PreserveSig标志传递给tlbimp。这应该将PreserveSigAttribute添加到它生成的方法中。这是添加到最新版本的新功能。访问tlbimpCodePlex网站了解更多信息。正如在另一个答案中提到的,您可以使用/PreserveSig标志来指示您想要将PreserveSig属性附加到在生成的接口上导出的所有方法。如果您不想将PreserveSig属性应用于所有方法,您可以使用C#代码轻松定义COM接口,然后应用PreserveSig属性并相应地修改函数的签名。然后,您可以从TLBIMP中的co类转换类实现,并根据需要使用您的接口定义。以上就是C#学习教程:ReturnS_FALSEfromC#COMdll全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
