C# 与 COM 之间的沟通

 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Tmiqpl
  5. {
  6.     /// <summary>
  7.     /// 创建 COM 对象
  8.     /// </summary>
  9.     public class CreateObject
  10.     {
  11.         /// <summary>
  12.         /// COM 对象实例化
  13.         /// </summary>
  14.         /// <param name="progid">COM 对象名或 Class ID</param>
  15.         public CreateObject(string progid)
  16.             : this(progid, true)
  17.         {
  18.         }
  19.         /// <summary>
  20.         /// COM 对象实例化
  21.         /// </summary>
  22.         /// <param name="progid">COM ID</param>
  23.         /// <param name="throwOnError">true 为引发一切可能发生的异常,false 忽略所有异常</param>
  24.         public CreateObject(string progid, bool throwOnError)
  25.         {
  26.             otype = Type.GetTypeFromProgID(progid, throwOnError);
  27.             obj = System.Activator.CreateInstance(otype);
  28.         }
  29.         /// <summary>
  30.         /// 获取或设置参数值列表 (针对于调用方法)
  31.         /// </summary>
  32.         public object[] Params
  33.         {
  34.             get { return this.objparams; }
  35.             set { this.objparams = value; }
  36.         }
  37.         /// <summary>
  38.         /// 获取或设置要调用的 COM 对象内部方法名
  39.         /// </summary>
  40.         public string FunctionName
  41.         {
  42.             get { return this._functionname; }
  43.             set { this._functionname = value; }
  44.         }
  45.         /// <summary>
  46.         /// 调用预定义好的方法
  47.         /// </summary>
  48.         public object Call()
  49.         {
  50.             return otype.InvokeMember(this.FunctionName, System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static| System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public, null, obj, this.Params);
  51.         }
  52.         /// <summary>
  53.         /// 获取或设置已预定义好的属性的值 (针对于调用属性)
  54.         /// </summary>
  55.         public object Property
  56.         {
  57.             get
  58.             {
  59.                 object[] _probj = null;
  60.                 return otype.InvokeMember(this.PropertyName, System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase, null, obj, _probj);
  61.             }
  62.             set
  63.             {
  64.                 object[] _proobj = new object[] { value };
  65.                 otype.InvokeMember(this.PropertyName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase | System.Reflection.BindingFlags.SetProperty, null, obj, _proobj);
  66.             }
  67.         }
  68.         /// <summary>
  69.         /// 设置要调用的属性名称
  70.         /// </summary>
  71.         public string PropertyName
  72.         {
  73.             get
  74.             {
  75.                 return this._propertyname;
  76.             }
  77.             set
  78.             {
  79.                 this._propertyname = value;
  80.             }
  81.         }
  82.         private string _propertyname;
  83.         private string _functionname;
  84.         //private string comid;
  85.         private Type otype;
  86.         private object obj;
  87.         private object[] objparams;
  88.          例子
  89.         / <summary>
  90.         / 获取当前机器上 Access 主版本号
  91.         / </summary>
  92.         //public static string Version
  93.         //{
  94.         //    get{
  95.         //        Tmiqpl.CreateObject _obj = new CreateObject("Access.Application");
  96.         //        _obj.PropertyName = "version";
  97.         //        return _obj.Property.ToString();
  98.         //    }
  99.         //}
  100.     }
  101. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值