首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

IShellBrowser接口有关问题

2012-02-02 
IShellBrowser接口问题准备用C#写一个类似资源管理器的控件,我参考了ImplementingIShellBrowsertohostIShe

IShellBrowser接口问题
准备用C#写一个类似资源管理器的控件,我参考了

Implementing   IShellBrowser   to   host   IShellView
http://www.codeproject.com/shell/explorer.asp

实现方法简介
1、窗体实现IShellBrowser接口,IShellBrowser.GetWindow返回了这个窗体的句柄
      IShellBrowser中的其他方法只是简单的返回-1;
2、调用IShellFolder.CreateViewObject,得到IShellView指针
3、调用IShellView.CreateViewWindow,创建显示子控件
4、view.UIActivate(SVUIA_ACTIVATE_FOCUS),显示改控件

运行后能在窗体上显示出来一个资源管理器的子窗口,   现在的问题是在这个窗口上操作有60%左右的几率会出现下面的错误
=========================================================================
System.AccessViolationException   was   unhandled
    Message= "Attempted   to   read   or   write   protected   memory.   This   is   often   an   indication   that   other   memory   is   corrupt. "
    Source= "System.Windows.Forms "
    StackTrace:
              at   System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&   msg)
              at   System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32   dwComponentID,   Int32   reason,   Int32   pvLoopData)
              at   System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32   reason,   ApplicationContext   context)
              at   System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32   reason,   ApplicationContext   context)
              at   System.Windows.Forms.Application.Run(Form   mainForm)
              at   TEST.Program.Main()   in   C:\Documents   and   Settings\Chenjian\桌面\TestBrowser\TEST\Program.cs:line   17
              at   System.AppDomain.nExecuteAssembly(Assembly   assembly,   String[]   args)
              at   System.AppDomain.ExecuteAssembly(String   assemblyFile,   Evidence   assemblySecurity,   String[]   args)
              at   Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
              at   System.Threading.ThreadHelper.ThreadStart_Context(Object   state)
              at   System.Threading.ExecutionContext.Run(ExecutionContext   executionContext,   ContextCallback   callback,   Object   state)
              at   System.Threading.ThreadHelper.ThreadStart()

=========================================================================


我怀疑我的IShellBrowser借口定义有问题
=========================================================================
        [StructLayout(LayoutKind.Sequential,   Pack   =   4)]
        public   struct   OLEMENUGROUPWIDTHS
        {
                [MarshalAs(UnmanagedType.ByValArray,   SizeConst   =   6)]
                public   int[]   width;
        }

[ComImport(),   Guid( "000214E2-0000-0000-C000-000000000046 "),   InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]


        public   interface   IShellBrowser
        {
                [PreserveSig]
                uint   GetWindow(out   IntPtr   phwnd);

                [PreserveSig]
                uint   ContextSensitiveHelp(int   fEnterMode);

                [PreserveSig]
                uint   InsertMenusSB(
                        [In]
                        IntPtr   hmenuShared,
                        [In,   Out,   MarshalAs(UnmanagedType.LPArray)]  
                        OLEMENUGROUPWIDTHS[]   lpMenuWidths);

                [PreserveSig]
                uint   SetMenuSB(IntPtr   hmenuShared,   IntPtr   holemenuRes,   IntPtr   hwndActiveObject);

                [PreserveSig]
                uint   RemoveMenusSB(IntPtr   hmenuShared);

                uint   SetStatusTextSB(
                        [In,   MarshalAs(UnmanagedType.LPWStr)]  
                        string   pszStatusText);

                [PreserveSig]
                uint   EnableModelessSB(int   fEnable);

                [PreserveSig]
                uint   TranslateAcceleratorSB(IntPtr   pmsg,   short   wID);

                [PreserveSig]
                uint   BrowseObject(IntPtr   pidl,   uint   wFlags);

                [PreserveSig]
                uint   GetViewStateStream(uint   grfMode,   ref   IntPtr   ppStrm);

                [PreserveSig]
                uint   GetControlWindow(uint   id,   out   IntPtr   phwnd);

                [PreserveSig]
                uint   SendControlMsg(uint   id,   uint   uMsg,   int   wParam,   int   lParam,   ref   int   pret);

                [PreserveSig]
                uint   QueryActiveShellView(IntPtr   ppshv);

                [PreserveSig]
                uint   OnViewWindowActive(IShellView   pshv);



                [PreserveSig]
                uint   SetToolbarItems(IntPtr   lpButtons,   uint   nButtons,   uint   uFlags);
        }
=========================================================================

请帮我看看IShellBrowser接口定义的有没有问题

[解决办法]
不会,只好帮你顶了。
[解决办法]
楼主问题解决了没有?

热点排行