Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IPersistStream保存上的COM互操作封送处理错误_C#_Marshalling_Com Interop - Fatal编程技术网

C# IPersistStream保存上的COM互操作封送处理错误

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

我正在开发一个带有两个工具栏的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的预期签名:

HRESULT Save(
  [in]  IStream *pStm,
  [in]  BOOL fClearDirty
);
此方法在实现类中的实现如下所示:

公共虚拟void SaveIntPtr pStm,bool fcleardrity{} 一个完整的答案是好的,但是关于如何调试和解决这个问题的任何想法都是有帮助的。请记住,我对COM互操作有一个最低限度的理论理解