【问题标题】:EOleSysError "The system cannot find the file specified" in COM objectEOleSysError “系统找不到指定的文件”在 COM 对象中
【发布时间】:2015-03-17 11:12:30
【问题描述】:

我正在开发一个 Delphi7 项目,该项目使用 COM 组件与 delphi 代码进行交互。所有这些组件都是用 C# 开发的。涉及所有 COM 组件的 .tlb 和 .dll 文件。也将它们注册在注册表中。其他组件已注册并可在 delphi 代码中使用,除了一个。

当访问特定 COM 对象的函数时,它会引发错误 -

Project ABC.exe 引发异常类 EOleSysError,并显示消息“系统找不到指定的文件”。进程停止。使用 Step 或 Run 继续

我正在努力理解 delphi 中的 COM 部分,并检查了以下区域:

  1. 导入类型库 - dll 添加并安装在那里
  2. 注册表 - 存在相同的注册表项

我曾经重建dll,将dll放在delphi代码文件夹中,并制作相应的注册表项以在delphi中使用COM组件。其他人使用相同的程序工作正常,但不是这个。

我还应该检查什么来解决这个问题?

【问题讨论】:

  • 显然首先要检查的是位数。 C# 程序集是 64 位的吗?
  • 该信息应发送至@DavidHeffernan :o)
  • @SirRufo - 你是对的!
  • @DavidHeffernan - 是的,它是一个 64 位 C# 程序集。

标签: c# delphi dll com delphi-7


【解决方案1】:

您已在 cmets 中确认您拥有 64 位程序集。您的 Delphi 编译器生成 32 位可执行文件。 32 位可执行文件不能使用进程内 64 位 COM 服务器。虽然 COM 服务器已注册,但它是在 64 位 COM 注册表中注册的。您的 32 位可执行文件搜索 32 位 COM 注册表并得出 COM 对象未注册的结论。

您的选择:

  1. 在进程外使用程序集。
  2. 将程序集切换为 32 位程序集,并在进程中使用它。

【讨论】:

  • 我已经检查了该 COM 组件的 regedit,我可以看到相同的注册表项。我让系统处于运行状态,其他人也工作正常,正在以相同的方式开发,但不是这样。我得到了这个 dll 有 64 位程序集的信息,但是属性中的程序集信息不包含任何值。另外如何完成进程外和进程内?您的意思是使用 32 位程序集创建一个 dll 并将其添加回 Delphi 代码吗?
  • @Trupti 它注册在哪个 COM 注册表中? 32 位还是 64 位注册表?
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 2014-03-16
  • 1970-01-01
  • 2013-11-21
  • 2023-03-17
  • 2017-12-21
  • 2015-09-28
相关资源
最近更新 更多