• c#实现IOleCommandTarget接口(原闯)


    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);
            }

        }

    }

  • 相关阅读:
    VC6.0 error LNK2001: unresolved external symbol _main解决办法
    C++中数字与字符串之间的转换(使用CString.Format或者sprintf)
    C++内存管理(超长)
    Flash, Flex, Air, Flashplayer之间的相互关系是什么?
    《KVM虚拟化技术实战和原理解析》读书笔记(十几篇)
    HNCU1323:算法2-1:集合union (线性表)
    Delphi XE7下如何创建一个Android模拟器调试
    DelphiXE Android的所有权限按照分类总结说明
    DelphiXE8怎么使用调试模式(朱建强)
    C++静态库中使用_declspec(dllexport) 不能导出函数的问题
  • 原文地址:https://www.cnblogs.com/alice/p/188615.html
Copyright © 2020-2023  润新知