创建 COM 互操作类的实例

2023-12-31

我正在尝试使用 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 个选项,关于如何处理返回的对象。

  1. 将返回的对象转换为真实的 CorelDRAW.Application 接口,但为此您需要引用一些包含它的 CorelDraw 库,这可能会产生版本控制问题。

  2. 反思,你在问题中提到。

  3. 使用动态关键字,这样您就可以调用现有的方法和属性,就像调用真正的 CorelDraw 类/接口一样。

    Type type = Type.GetTypeFromProgID("CorelDRAW.Application", true);
    dynamic vc = (dynamic)Activator.CreateInstance(type);
    vc.Visible = true;
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建 COM 互操作类的实例 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • Qt 的图表库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • SSIS - OLE DB 目标 - 表或视图加载与快速加载

    据我读到 表或视图数据访问模式将每一行作为一个事务一次提交 因此 制作一个传输 500 万行的包需要很长时间 30 分钟以上 快速加载数据访问模式允许在插入到目标时指定批处理行和提交大小 例如 插入 500 万条记录只需 2 分钟多一点 现
  • 如何在 ASP.NET MVC 中使用 Windows 语音合成器

    我尝试使用System Speech在 ASP NET mvc 应用程序中生成语音的类 HttpPost public ActionResult TTS string text SpeechSynthesizer speechSynthes
  • 用 OpenGL 绘制彩色网格?

    我的目标是能够创建所谓的占用网格 它类似于图块 网格游戏 看起来像附图 这是我正在从事的一个小型机器人项目 一切都是用 C C 完成的 所以我希望能够 更改分辨率或每个网格单元的大小 例如 1x1cm 或 5x5cm 等 根据某些标准更改每
  • 如何在 Sublime Text 3 中跳转到上一个和最后一个光标? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Sublime Text 中前后跳转光标位置历史记录 我用谷歌搜索了很多并发现缓冲区滚动 https github com tito
  • npm script 命令用于从另一个 package.json 运行脚本命令

    我有两个使用 npm 的独立项目 所以我都有 some base folder projectA package json and some base folder projectB package json 每个文件都有一个scripts
  • JSON 值不会插入到 ArrayList [重复]

    这个问题在这里已经有答案了 有人可以帮助我如何将 JSON 值添加到列表中吗 尽管放置了 List add 函数 但我似乎无法插入它 这是我第一次在 Android 中修改 JSON 的东西 我真的很感谢你的帮助 P S 不知何故 API
  • 使用 JInitator 在 Internet Explorer 8 中使用 Oracle Forms/Applications

    有人能够让运行 JInitator 的 Oracle Forms 在 Internet Explorer 8 中贷款吗 我尝试删除所有附加组件 各种版本的 Java 使用通配符将域添加到受信任的站点 并使用兼容模式 但均无济于事 我希望我们
  • ModelState.IsValid 还是 Model.IsValid?

    当我遇到两种方法 我认为同样有效 来做某事时 我正在编写一个控制器并为其进行单元测试 我的所有模型都有一个 IsValid 属性 我可以检查该属性以询问模型是否有效 在回发到控制器操作方法时 如果模型有效 我想保存 否则我想重新显示表单以供
  • Delphi 2007 和 {$IFDEF...} 指令,无法看到我们的条件

    我们的代码库中的组件文件中有以下内容 IFDEF ADO FDatabase TADODatabase ELSE FDatabase TODBCDatabase ENDIF 原因是 对于各种遗留应用程序 将使用一种或另一种类型的数据库连接和
  • Python heapq:如何使用列表列表的第 n 个元素对堆进行排序?

    所以我有一些列表被添加到堆中 例如 n 1 5 93 2 6 44 4 7 45 6 3 12 heapq heapify n print n 这将根据列表的第一个元素进行比较和排序 我的问题是 如何对 heapq 进行排序 以便它比较每个
  • 如何在 python 中使用 os.system() 来运行 shell 命令

    在某些 shell 脚本中 您需要确认 yes 才能运行 shell 更简单的方法是使用 yes 和管道 如下所示 yes test py 然后 您可以自动运行 shell 脚本 而无需再回答 是 今天 当我在 python 中尝试使用它时
  • 简码输出在新行后添加

    我正在尝试创建一个短代码来将 CSS 样式属性添加到页面 我将以下代码添加到主题的functions php中 function add style atts content null return add shortcode style
  • UIVisualEffectView 创建一个灰色框而不是模糊

    我正在使用 UIVisualEffectView 模糊 SpriteKit 中的屏幕部分 如下所示 let blur UIBlurEffect UIBlurEffect style UIBlurEffectStyle Dark let UI
  • 在 Linux 中将 RCurl 安装为 R 开发工具的一部分时出错

    首先 我对 Linux 还很陌生 我在 Linux 服务器 Ubuntu 12 10 Quantal Quetzal 上安装了 R 3 1 1 最新版本 并尝试在 R 中安装 devtools 包 当我运行install packages
  • gcc 命令中 -fsyntax-only 选项有什么用?

    我读到了关于 fsyntax only选项中gcc命令的手册页 我知道它显示丢失头文件的错误 并且忽略用户编码错误 我需要知道我的理解是否正确 我也需要更多地了解这个选项 那么有人可以解释一下这个选项吗 fsyntax only防止编译器生
  • 为什么不能在drawRect中改变UIView的背景颜色?

    理论上 您可以通过以下方式轻松设置背景颜色 self backgroundColor UIColor redColor 在drawRect中 但这没有任何效果 您可以更改视图的大小 边框 子视图等 但不能更改背景颜色 类似的 SO 查询建议
  • 如何在 shell 脚本中的 curl 命令中传递变量

    我有一个curl命令 curl u USER ID PASSWORD X GET http blah gso woo com 8080 rest job execution job details job id 变量job id其中有一个值
  • Backbone.Collection 上的 toJSON#在哪里?

    我不知道为什么 但我无法让它工作 var friends new Backbone Collection name Athos job Musketeer name Porthos job Musketeer name Aramis job
  • 创建 COM 互操作类的实例

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