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)]