这个很好用,采用了反射技术,无需定义任何东西就可以调用com,由于是动态的,所以性能不比前期绑定的好
private Type drcom = null;
private object drcomObject = null;
一、带参数方法
drcom = Type.GetTypeFromProgID("COMINTERFACE.Business");
drcomObject = Activator.CreateInstance(drcom);
object[] parameter = new object[1];
parameter[0] = "s100";
ret = (int)drcom.InvokeMember("IsExist", BindingFlags.Default | BindingFlags.InvokeMethod, null, drcomObject, parameter);
二、带返回参数方法
drcom = Type.GetTypeFromProgID("COMINTERFACE.Business");
drcomObject = Activator.CreateInstance(drcom);
object[] parameter = new object[2];
parameter[0] = "s100";
parameter[1] = 0;
// Initialize a ParameterModifier with the number of parameters.
ParameterModifier p = new ParameterModifier(2);
// Pass the second parameters by reference.
p[1] = true;
// The ParameterModifier must be passed as the single element
// of an array.
ParameterModifier[] mods = { p };
ret = (int)drcom.InvokeMember("GetBalance", BindingFlags.Default | BindingFlags.InvokeMethod, null, drcomObject, parameter, mods, null, null);
double balanceMoney = Convert.ToDouble(parameter[1]); //返回值
三、属性赋值
drcom = Type.GetTypeFromProgID("COMINTERFACE.Registration");
drcomObject = Activator.CreateInstance(drcom);
drcom.InvokeMember("UserAccount", BindingFlags.SetProperty, null, drcomObject, new object[] {"s100" });
drcom.InvokeMember("UserName", BindingFlags.SetProperty, null, drcomObject, new object[] { "aaaa" });
drcom.InvokeMember("Password", BindingFlags.SetProperty, null, drcomObject, new object[] { "111111" });
drcom.InvokeMember("Operator", BindingFlags.SetProperty, null, drcomObject, new object[] { "综合" });
drcom.InvokeMember("TollGroupID", BindingFlags.SetProperty, null, drcomObject, new object[] { 20 });
drcom.InvokeMember("CertificateCode", BindingFlags.SetProperty, null, drcomObject, new object[] { "123456" });
drcom.InvokeMember("Telephone", BindingFlags.SetProperty, null, drcomObject, new object[] { "13812345678" });
ret = (int)drcom.InvokeMember("Register", BindingFlags.Default | BindingFlags.InvokeMethod, null, drcomObject, null);