c# - 将 CreateComObject 与另一个目录中的 DLL 一起使用
问题描述
我有一个 COM 可见的 C# 类。我已经使用 Import Component (Import Type Library) 向导将它导入到我的 Delphi XE 项目中。如果我将 C# .DLL 与我的 Delphi .EXE 放在同一目录中,我可以使用导入的 .PAS (TLB) 文件的 .Create 方法来创建此类的实例并使用其方法/函数。我想将此 .DLL 移动到另一个目录。如果它在另一个目录中,是否可以使用 Create 方法创建此类的实例?或者是否可以指示应用程序在另一个目录中查找新的 DLL?
我需要将 DLL 放在另一个目录中,因为我必须使用当前与 EXE 位于同一目录中的新版本 DLL,并且我无法覆盖可执行文件目录中的旧 DLL(它是需要那些旧DLL)。因此,我计划将所有新的 DLL 放在一个子目录中并调用新函数。
我已经尝试将其放在子目录中,但应用程序无法找到该 DLL。
解决方案
CreateComObject不将文件名作为参数。它需要一个GUID
用于查找 COM 对象所在的位置。该信息来自注册表,其中包含在注册 COM 对象时创建的条目。
CreateComObject
是 Windows API 函数CoCreateInstance的包装器。
如果移动 DLL,则必须重新注册以反映新位置。
推荐阅读
- c - 无法从 C 中的共享库返回正确的内存地址
- windows - 如果我卸载 Microsoft Visual C++2015-2019 Redistributable,为什么注册表项仍显示为已安装?
- visual-studio-code - VS Code BASH 终端 - 额外字符
- python - 我有这张包含信号的图像,我想找到频率高于 0.25 和 -0.25 的信号的峰值并连接这些峰值
- python - 为什么相同的表达式在作为一行输入到 python 解释器时返回 True,而在脚本中运行时返回 False?
- android - 多重 ListTile 子字符串
- r - 使用 dplyr 使用变量和级别列表将字符数据转换为因子
- git - 为什么'git diff'只返回没有内容的文件路径?
- sql - 模拟 DELETE 外键检查
- reactjs - 打字稿和上下文,类型不可分配