我正在尝试使用 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.Application
with CorelDRAW.ApplicationClass
因为当我浏览 Interop.CorelDRAW 作为资源时可用,但是然后u.getType...
fails.
我怎样才能让它发挥作用?谢谢你!
您可以使用以下构造创建已注册 ActiveX 对象的实例:
Type type = Type.GetTypeFromProgID("CorelDRAW.Application", true);
object vc = Activator.CreateInstance(type);
然后你有 3 个选项,关于如何处理返回的对象。
将返回的对象转换为真实的 CorelDRAW.Application 接口,但为此您需要引用一些包含它的 CorelDraw 库,这可能会产生版本控制问题。
反思,你在问题中提到。
-
使用动态关键字,这样您就可以调用现有的方法和属性,就像调用真正的 CorelDraw 类/接口一样。
Type type = Type.GetTypeFromProgID("CorelDRAW.Application", true);
dynamic vc = (dynamic)Activator.CreateInstance(type);
vc.Visible = true;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)