c# - 想要在部署的机器上使用 COM dll 文件而不注册 dll 文件

标签 c# dll com codedom

我会把它变得非常简单,因为它很快就会变得非常困惑。我有一个 COM dll(用 VB6 制作),我希望能够通过我的 C# 应用程序使用它。以下是我采取的步骤和结果。

  1. 通过 Visual Basic 6 创建 COM dll
  2. 将 COM dll 添加到 .Net 应用程序。
  3. 在 x86/Debug 中检索 .Net 生成的“interop.dllName.dll”文件
  4. interop 文件作为引用程序集添加到我的 CodeDom 生成的 exe 文件中。
  5. 当 .exe 文件与 interop.dllname.dll 文件位于同一目录时,CodeDom 生成的 .exe 文件在我的机器上运行良好
  6. 即使 interop.dllname.dll 文件与 .exe 存在于同一目录中,CodeDom 生成的 .exe 文件也在部署的机器上工作文件。

请注意:

  • 原始 COM .dll 未在部署的计算机上注册,因为部署的计算机无法将 COM .dll 识别为有效的 dll 文件。

  • COM .dll 是在 x86 环境中创建的,而部署的机器在 x64 环境中运行(这有什么区别吗)?

我的目标是什么: 我希望能够在不依赖 interop.dllname.dll 文件的情况下运行 CodeDom 生成的 .exe 文件。有什么方法可以将这些dll文件存储在内存中吗?此外,我不希望我的用户在使用 CodeDom 生成的 .exe 文件之前必须注册 dll 文件。有什么办法可以做到这一点吗?

我很感激在这件事上的任何帮助。

谢谢你的时间,

埃文

最佳答案

这听起来很像您有一个直接的 32/64 位不匹配问题。由于您的 COM DLL 是 32 位的,因此您需要:

  1. 确保使用此 COM DLL 的应用程序以 x86 为目标。
  2. 使用驻留在 64 位计算机上的 SysWow64 文件夹中的 32 位版本的 regsvr32 注册 COM DLL。

我的猜测是您正在尝试注册 64 位版本的 regsvr32。如果您确保与注册和消费相关的所有内容都是 32 位的,那么您应该没问题。

关于c# - 想要在部署的机器上使用 COM dll 文件而不注册 dll 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705491/

相关文章:

c# - UWP 模板化控件未获得焦点

c# - html内容的总宽度,使用c#

c++ - QtCreator LNK2019 外部库错误

c++ - 以编程方式验证已签名的 dll 的 C++

c# - 使用 Win32 库时,您更喜欢使用哪个 PE 查看器应用程序?

c# - WCF 身份验证不起作用

javascript - 在javascript程序中使用c动态链接库

c# - 将 VB6 与 COM Interop (C#) 结合使用时的意外事件行为

c++ - 获取普通文件对话框中当前选中文件的真实名称?

c# - 根据其他列表上的索引从表中选择行