小编Ben*_*tle的帖子

创建 COM 互操作类的实例

我正在尝试使用 C# 从我的程序中打开 CorelDRAW。到目前为止,我已经能够通过引用适当的 com 库并调用来做到这一点

CorelDRAW.Application draw = new CorelDRAW.Application();
draw.Visible = true; 
Run Code Online (Sandbox Code Playgroud)

但是,我希望我的程序能够与任何支持互操作的 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);
}
Run Code Online (Sandbox Code Playgroud)

该程序失败了,u.CreateInstance...因为它CorelDRAW.Application是一个接口,而不是一个类。我还尝试替换CorelDRAW.Application为,CorelDRAW.ApplicationClass因为当我浏览 Interop.CorelDRAW 作为资源时可用,但随后u.getType...失败。

我怎样才能让它发挥作用?谢谢你!

c# reflection com-interop coreldraw .net-assembly

4
推荐指数
1
解决办法
6786
查看次数

标签 统计

.net-assembly ×1

c# ×1

com-interop ×1

coreldraw ×1

reflection ×1