Пример #1
0
 /// <summary>
 /// 刷新VBA方法列表
 /// </summary>
 protected void RefreshMethodList()
 {
     myVBAMethods.Clear();
     System.Reflection.Assembly myAssembly = this.Assembly;
     foreach (object obj in this.Items)
     {
         if (obj is Microsoft.Vsa.IVsaCodeItem)
         {
             Microsoft.Vsa.IVsaCodeItem CodeItem = (Microsoft.Vsa.IVsaCodeItem)obj;
             System.Type t = myAssembly.GetType(this.RootNamespace + "." + CodeItem.Name);
             System.Reflection.MethodInfo[] ms = t.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
             foreach (System.Reflection.MethodInfo m in ms)
             {
                 VBAScriptMethodItem MethodItem = new VBAScriptMethodItem();
                 myVBAMethods.Add(MethodItem);
                 MethodItem.ModuleName   = CodeItem.Name;
                 MethodItem.MethodName   = m.Name;
                 MethodItem.MethodObject = m;
                 MethodItem.ReturnType   = m.ReturnType;
                 if (m.GetParameters().Length == 0)
                 {
                     System.Type dt = SlowAndSteadyParser.DelegateHelper.GetDelegateType(m.ReturnType);
                     if (dt != null)
                     {
                         MethodItem.MethodDelegate = System.Delegate.CreateDelegate(dt, m);
                     }
                 }
             }                    //foreach
         }
     }
 }
Пример #2
0
        /// <summary>
        /// 无参数的执行指定名称的脚本方法并返回方法返回值,模块名称和方法名称不区分大小写
        /// </summary>
        /// <param name="ModuleName">模块名称</param>
        /// <param name="MethodName">方法</param>
        /// <returns>若执行成功则返回方法返回值,否则返回空引用</returns>
        public object RunScriptMethod(string ModuleName, string MethodName)
        {
            VBAScriptMethodItem MethodItem = GetMethodItem(ModuleName, MethodName);

            if (MethodItem == null || MethodItem.MethodDelegate == null)
            {
                return(null);
            }
            else
            {
                return(MethodItem.MethodDelegate.DynamicInvoke(null));
            }
        }
Пример #3
0
        /// <summary>
        /// 获得指定名称的脚本方法对象,方法名称不区分大小写
        /// </summary>
        /// <param name="MethodName">方法名称</param>
        /// <returns>脚本方法对象</returns>
        public System.Reflection.MethodInfo GetScriptMethod(string MethodName)
        {
            VBAScriptMethodItem MethodItem = GetMethodItem(null, MethodName);

            if (MethodItem == null)
            {
                return(null);
            }
            else
            {
                return(MethodItem.MethodObject);
            }
        }
Пример #4
0
 /// <summary>
 /// 无参数的执行指定模块指定名称代码方法并返回布尔值,模块名称和方法名称不区分大小写
 /// 若方法不存在或执行错误则返回默认值
 /// </summary>
 /// <param name="ModuleName">模块名称</param>
 /// <param name="MethodName">方法名称</param>
 /// <param name="DefaultValue">默认值</param>
 /// <returns>执行结果</returns>
 public bool GetScriptBooleanValue(string ModuleName, string MethodName, bool DefaultValue)
 {
     if (this.bolEnable)
     {
         VBAScriptMethodItem MethodItem = GetMethodItem(ModuleName, MethodName);
         if (MethodItem != null && MethodItem.MethodDelegate != null)
         {
             try
             {
                 return(Convert.ToBoolean(MethodItem.MethodDelegate.DynamicInvoke(null)));
             }
             catch {}
         }
     }
     return(DefaultValue);
 }
Пример #5
0
        /// <summary>
        /// 无参数的执行指定模块指定名称的脚本方法并返回方法返回值,模块名称和方法名称不区分大小写
        /// </summary>
        /// <param name="ModuleName">模块名称</param>
        /// <param name="MethodName">方法名称</param>
        /// <param name="obj">调用的对象</param>
        /// <param name="Parameters">参数数组</param>
        /// <returns>若执行成功则返回方法返回值,否则返回空引用</returns>
        public object RunScriptMethod(string ModuleName, string MethodName, object obj, object[] Parameters)
        {
            VBAScriptMethodItem MethodItem = GetMethodItem(ModuleName, MethodName);

            if (MethodItem == null)
            {
                return(null);
            }
            else
            {
                if (MethodItem.MethodDelegate != null)
                {
                    return(MethodItem.MethodDelegate.DynamicInvoke(null));
                }
                else
                {
                    return(MethodItem.MethodObject.Invoke(obj, Parameters));
                }
            }
        }
		/// <summary>
		/// 刷新VBA方法列表
		/// </summary>
		protected void RefreshMethodList()
		{
			myVBAMethods.Clear();
			System.Reflection.Assembly myAssembly = this.Assembly ;
			foreach( object obj in this.Items )
			{
				if( obj is Microsoft.Vsa.IVsaCodeItem )
				{
					Microsoft.Vsa.IVsaCodeItem CodeItem = ( Microsoft.Vsa.IVsaCodeItem ) obj ;
					System.Type t = myAssembly.GetType( this.RootNamespace + "." + CodeItem.Name );
					System.Reflection.MethodInfo[] ms = t.GetMethods( System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static );
					foreach( System.Reflection.MethodInfo m in ms )
					{
						VBAScriptMethodItem MethodItem = new VBAScriptMethodItem();
						myVBAMethods.Add( MethodItem );
						MethodItem.ModuleName = CodeItem.Name ;
						MethodItem.MethodName = m.Name ;
						MethodItem.MethodObject = m ;
						MethodItem.ReturnType = m.ReturnType ;
						if( m.GetParameters().Length == 0 )
						{
							System.Type dt = SlowAndSteadyParser.DelegateHelper.GetDelegateType( m.ReturnType );
							if( dt != null)
								MethodItem.MethodDelegate = System.Delegate.CreateDelegate( dt , m );
						}
					}//foreach
				}
			}
		}