项目中用到一个COM组件(CertKitAx.dll),手动添加引用(VS中 引用->添加引用->COM)添加成功。
使用时代码:
using CERTKITAXLib;
......
......//这里调用的是dll里的类的成员方法
CERTKITAXLib.BlockHouseClass bhc = new CERTKITAXLib.BlockHouseClass();
bhc.CFCA_SelectUserCerts(false);由于项目特殊,需要把“手动添加引用”这步用代码实现,并实现上述调用代码。
急,请高手帮忙!!!
使用时代码:
using CERTKITAXLib;
......
......//这里调用的是dll里的类的成员方法
CERTKITAXLib.BlockHouseClass bhc = new CERTKITAXLib.BlockHouseClass();
bhc.CFCA_SelectUserCerts(false);由于项目特殊,需要把“手动添加引用”这步用代码实现,并实现上述调用代码。
急,请高手帮忙!!!
参考:
反射 C#(Assembly.Load方法介绍)
//Guid clsid=new Guid("com在注册表中的CLSID");
//Type comType = Type.GetTypeFromCLSID(clsid);
object comObj=Activator.CreateInstance(comType);
object result = comType.InvokeMember("方法名", System.Reflection.BindingFlags.InvokeMethod, null, comObj, new object[] { 方法参数 });
不行啊。按你这样写:
Assembly.Load(Application.StartupPath + "\\CertKitAx.dll").CreateInstance("CERTKITAXLib.BlockHouseClass");
报错了,未能加载文件或程序集或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)
obj ret = System.Activator.CreateInstance(t);
Assembly.LoadFrom(path)这一步就有问题,后面的都不用继续了。
你按我给的链接里面的步骤生成一个"强命名程序集"然后Assembly.Load("程序集名,Version=版本,culture=区域信息,PublicKeyToken=公钥")就行了...
C++或者VB的dll属于非托管代码,可以用工具转化成托管代码以后才可以操作;
tlbimp.exe /out:文件名 /namespace:名字空间 /asmversion:版本戳(2) 然后 用 reflection 方式调用调用 proxy dll 里的类,方法。等按照这个思路就可以实现了,手头上有一个工具就按照这种方式做的,可以测试任意一个com组件的方法。