我会把它变得非常简单,因为它很快就会变得非常困惑。我有一个 COM dll(用 VB6 制作),我希望能够通过我的 C# 应用程序使用它。以下是我采取的步骤和结果。
- 通过 Visual Basic 6 创建 COM dll
- 将 COM dll 添加到 .Net 应用程序。
- 在 x86/Debug 中检索 .Net 生成的“interop.dllName.dll”文件
- 将 interop 文件作为引用程序集添加到我的 CodeDom 生成的 exe 文件中。
- 当 .exe 文件与 interop.dllname.dll 文件位于同一目录时,CodeDom 生成的 .exe 文件在我的机器上运行良好
- 即使 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 位的,因此您需要:
- 确保使用此 COM DLL 的应用程序以 x86 为目标。
- 使用驻留在 64 位计算机上的
SysWow64
文件夹中的 32 位版本的 regsvr32 注册 COM DLL。
我的猜测是您正在尝试注册 64 位版本的 regsvr32
。如果您确保与注册和消费相关的所有内容都是 32 位的,那么您应该没问题。
关于c# - 想要在部署的机器上使用 COM dll 文件而不注册 dll 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705491/