zoukankan      html  css  js  c++  java
  • VS 2010 开发 ActiveX 交互篇二

    ActiveX 控件中调用 JavaScript 方法

    1. 添加接口 【IOleContainer】,代码如下

    [ComImport, Guid("0000011B-0000-0000-C000-000000000046"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleContainer
    {
            void EnumObjects([In, MarshalAs(UnmanagedType.U4)] int grfFlags, [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppenum);
            void ParseDisplayName([In, MarshalAs(UnmanagedType.Interface)] object pbc, [MarshalAs(UnmanagedType.BStr)] string pszDisplayName, [Out, MarshalAs(UnmanagedType.LPArray)] int[] pchEaten, [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);
            void LockContainer([In, MarshalAs(UnmanagedType.I4)] int fLock);
    }


    2. 添加接口 【IOleClientSite】,代码如下

    [Guid("00000118-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleClientSite
    {
            void SaveObject();
            void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);
            void GetContainer(out IOleContainer ppContainer);
            void ShowObject();
            void OnShowWindow(bool fShow);
            void RequestNewObjectLayout();
    }

    3. 调用JS方法的代码如下

    参数 functionName 为 JS 方法名称

    参数 paras 是 String 类型,可以使用特定规则组合多个值

    private void CallJavaScriptMethod(string functionName, string paras)
    {
                BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public;
    
                Type typeIOleObject = this.GetType().GetInterface("IOleObject", true);
                object objClientSite = typeIOleObject.InvokeMember("GetClientSite", bindingFlags, null, this, null);
    
                IOleClientSite oleClientSite = objClientSite as IOleClientSite;
                IOleContainer oleContainer;
                oleClientSite.GetContainer(out oleContainer);
    
                object[] args = new object[1];
                args[0] = paras;
    
                IHTMLDocument htmlDocument = (IHTMLDocument)oleContainer;
                object script = htmlDocument.Script;
    
                try
                {
                    script.GetType().InvokeMember(functionName, bindingFlags, null, script, args);
                }
                catch { }
    }
    
    
  • 相关阅读:
    java.io.FileNotFoundException: D:workspacegbrmWebRoot空缺职位列表20140414093026.xls (系统找不到指定的路径。)
    select * from (select t.*,rownum as rowno from (select * from j_kqzw where 1=1 and DEADLINE >='2013-04-14' and DEADLINE <='2014-04-14' ) t)where rown
    hibernate的映射文件字段长度和数据库里面的字段长度
    八门神器
    计算机
    c语言
    捕鱼达人
    桂林力港网络科技有限公司
    cocos2d-x
    3gp 编辑
  • 原文地址:https://www.cnblogs.com/abccome/p/3344575.html
Copyright © 2011-2022 走看看