C# IPersistStream保存上的COM互操作封送处理错误
我正在开发一个带有两个工具栏的Windows资源管理器扩展,我没有编写原始代码,它使用IPersistStream和BandObject的定义。使用VS 2010连接到Explorer时,出现以下错误: 托管调试助手“InvalidMemberDeclaration”在“C:\WINDOWS\explorer.exe”中检测到问题 其他信息:确定如何封送类型为“BandObjectLib.IPersistStream”的成员“Save”的参数时发生以下错误:System.Runtime.InteropServices.MarshalDirectiveException:无法封送“返回值”:无效的托管/非托管类型组合Int/UInt必须与SysInt或SysUInt配对。这很可能是由于其中一个参数上的MarshalAs属性不兼容所致 我假设这意味着C方法签名之间存在一些不匹配: //无持续信号 void Save[In,MarshalAsUnmanagedType.Interface]IntPtr pStm[In,MarshalAsUnmanagedType.Bool]Bool fclearditry; 以及IPersistStream::Save的预期签名:C# IPersistStream保存上的COM互操作封送处理错误,c#,marshalling,com-interop,C#,Marshalling,Com Interop,我正在开发一个带有两个工具栏的Windows资源管理器扩展,我没有编写原始代码,它使用IPersistStream和BandObject的定义。使用VS 2010连接到Explorer时,出现以下错误: 托管调试助手“InvalidMemberDeclaration”在“C:\WINDOWS\explorer.exe”中检测到问题 其他信息:确定如何封送类型为“BandObjectLib.IPersistStream”的成员“Save”的参数时发生以下错误:System.Runtime.Inte
HRESULT Save(
[in] IStream *pStm,
[in] BOOL fClearDirty
);
此方法在实现类中的实现如下所示:
公共虚拟void SaveIntPtr pStm,bool fcleardrity{}
一个完整的答案是好的,但是关于如何调试和解决这个问题的任何想法都是有帮助的。请记住,我对COM互操作有一个最低限度的理论理解