我正在尝试使用C#从我的程序中打开CorelDRAW。到目前为止,我已经能够通过引用适当的com库并调用
CorelDRAW.Application draw = new CorelDRAW.Application();
draw.Visible = true; 但是,我希望我的程序可以与任何支持互操作的CorelDRAW版本一起工作。我正在尝试使用反射在运行时加载互操作库,其中可以为正确的版本选择特定的dll。
string path = "Interop.CorelDRAW.dll";
Assembly u = Assembly.LoadFile(path);
Type testType = u.GetType("CorelDRAW.Application");
if (testType != null)
{
object draw = u.CreateInstance("CorelDRAW.Application");
FieldInfo fi = testType.GetField("Visible");
fi.SetValue(draw, true);
}程序在u.CreateInstance...失败时失败,因为CorelDRAW.Application是一个接口,而不是一个类。我还尝试用CorelDRAW.ApplicationClass替换CorelDRAW.Application,因为当我将Interop.CorelDRAW作为资源浏览时,它是可用的,但是u.getType...失败了。
我怎么才能让它工作呢?谢谢!
发布于 2013-03-23 05:52:37
您可以使用以下构造创建已注册ActiveX对象的实例:
Type type = Type.GetTypeFromProgID("CorelDRAW.Application", true);
object vc = Activator.CreateInstance(type);然后你有3个选项,关于如何处理返回的对象。
类型类型= Type.GetTypeFromProgID("CorelDRAW.Application",true);动态vc =(动态)Activator.CreateInstance(类型);vc.Visible = true;
发布于 2013-11-13 00:43:53
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(fullPath);
dynamic app = assembly.CreateInstance("CorelDRAW.ApplicationClass", true);这会起作用的
https://stackoverflow.com/questions/12926102
复制相似问题