Alice's Blog

Alice's Blog
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#实现IOleCommandTarget接口(原闯)

Posted on 2005-07-08 14:43  Alice  阅读(794)  评论(0编辑  收藏  举报
using System;
using System.Runtime.InteropServices;
namespace d4htmlinterface
{
    
/// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>

    public class htmlinterface
    
{
        
public htmlinterface()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        [StructLayout(LayoutKind.Sequential,CharSet
=CharSet.Unicode)]
            
public struct OLECMDTEXT
        
{
            
public uint cmdtextf;
            
public uint cwActual;
            
public uint cwBuf;
            [MarshalAs(UnmanagedType.ByValTStr,SizeConst
=100)]public char rgwz;
        }


        [StructLayout(LayoutKind.Sequential)]
            
public struct OLECMD
        
{
            
public uint cmdID;
            
public uint cmdf;
        }


        
// Interop definition for IOleCommandTarget.
        [ComImport,
            Guid(
"b722bccb-4e68-101b-a2bc-00aa00404770"),
            InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
            
public interface IOleCommandTarget
        
{
            
//IMPORTANT: The order of the methods is critical here. You
            
//perform early binding in most cases, so the order of the methods
            
//here MUST match the order of their vtable layout (which is determined
            
//by their layout in IDL). The interop calls key off the vtable ordering,
            
//not the symbolic names. Therefore, if you 
            
//switched these method declarations
            
//and tried to call the Exec method 
            
//on an IOleCommandTarget interface from your
            
//application, it would translate 
            
//into a call to the QueryStatus method instead.
            void QueryStatus(ref Guid pguidCmdGroup, UInt32 cCmds,
                [MarshalAs(UnmanagedType.LPArray, SizeParamIndex
=1)] 
                OLECMD[] prgCmds, 
ref OLECMDTEXT CmdText);
            
void Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, 
                
ref object pvaIn, ref object pvaOut);
        }

    }

}