我的 32 位和 64 位 COM 组件可以同时驻留在同一台计算机上吗?

2024-06-21

我有一个 32 位 COM 组件,主要由 ASP 使用,我们也有 64 位版本。

64 位版本在功能上是相同的,并且也使用相同的 ProgID(据我所知,相同的 CLSID 等)。

我可以在与 32 位版本相同的计算机上安装/regsvr 64 位版本(显然在不同的文件夹中),并让我现有的 32 位应用程序继续使用 32 位组件,而我的 64 位应用程序使用 64 位版本?

这些是用 C++ 而不是 .NET 编写的本机代码组件。


这应该是可能的。

在 64 位 Windows 上,registry http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx and 文件系统 http://msdn.microsoft.com/en-us/library/aa384187(VS.85).aspx针对 32 位应用程序进行重定向。 32 位 COM dll 的注册将位于注册表中的单独位置 (HKLM\Software\Wow6432Node\Classes),并且您的 COM 组件应位于单独的文件夹中,64 位位于 Program Files 下,32 位位于 Program Files 下(x86)。 32 位应用程序的注册表/文件重定向应该使这项工作透明。

组件本身可能会阻止这种情况 - 例如,如果它创建的全局资源最终会导致 32 位和 64 位版本之间发生冲突。

这种情况在 64 位 Windows 上已经存在。在我的 64 位系统上,我有:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID{8856F961-340A-11D0-A96B-00C04FD705A2}\InProcServer32\Default = C:\Windows\SysWow64\ieframe.dll

And

HKEY_CLASSES_ROOT\CLSID{8856F961-340A-11D0-A96B-00C04FD705A2}\InProcServer32\Default = C:\Windows\System32\ieframe.dll

同一系统上的 32 位和 64 位版本的 WebBrowser 控件。

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

我的 32 位和 64 位 COM 组件可以同时驻留在同一台计算机上吗? 的相关文章

  • 32 位键盘挂钩意外地在 64 位应用程序中工作,但挂起 Outlook

    我已经读了很多关于这个问题的文章 但情况却变得更加混乱 我有一个 32 位应用程序 它安装了 KeyboardHook 来等待全局热键并唤醒 在 Win 7 x64 版本上运行它 我注意到按下热键时它会挂起 Outlook x64 版本 所
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 将 struct* 从 C# 传递到 C++ dll

    C dll中的结构体定义如下 struct WAVE INFO int channel num int audio type char wave data int wave length 调用方法如下 extern C STRUCTDLL
  • Inno Setup 以字符串作为参数调用 DLL

    当我尝试使用 Inno Setup 脚本中的 DLL 时 出现异常 我认为问题出在dll代码中的这一行 StreamReader sreader new StreamReader newpath 如果我将路径硬编码为 D source tx
  • 从内存加载动态库

    是否可以从内存而不是从 mac gcc 上的文件系统加载库 在 Windows 中 我使用 MemoryModule 但它显然不跨平台兼容 首先 要做到这一点 我建议您阅读OS X ABI 动态加载器参考 https developer a
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Powershell如何查询COM对象上的接口

    我使用 Powershell 创建了一个 COM 对象 obj new object com MyLib MyObj 然后我需要查询接口 MyLib MyInterface 那个对象上 但我不知道如何使用 PowerShell 来做到这一点
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗
  • 在 Visual Studio 2010 Express 中自动从 dll 生成 C# 包装类?

    我的一位同事告诉我 Visual Studio 允许人们指向 dll并自动神奇地生成一个 C 包装类 这真的可能吗 如果是这样 如何实现这一目标 我浏览过网页 但没有想出任何东西 谢谢大家 我想我也会分享这些资源 如何 创建 COM 包装器
  • 混合 64 位/32 位环境中的 NSInteger 和 NSUInteger

    我在 NSLog NSAssert 等调用中有相当多的字符串格式说明符 这些调用使用 d and u with NSInteger int on 32bit and NSUInteger unsigned int on 32bit 分别类型
  • 在 Snow Leopard 上的 64 位 Cocoa 应用程序中快速提取电影帧

    我在 Snow Leopard 上编写了一个 64 位 Cocoa 应用程序 用于提取单个帧 来自使用 QuickTime API 的电影 它使用 QTMovie currentFrameImage 不幸的是 这非常慢 正如这里指出的 ht
  • 如何在 Silverlight 4 中释放 COM 对象

    当将 COM Interop 与 Office 通常是 Excel 一起使用时 我总是小心地确保我调用Marshal ReleaseComObject在每个引用上 以避免 Excel 不退出的问题如本知识库文章中所述 http suppor
  • 加载前检查 OSX 包的签名

    目标 加载已验证已签名 或针对任意算法进行验证 的 so bundle 我希望能够使用 OSX 的内置二进制签名工具或某些自定义算法来验证 so bundle 然后使用 dlopen 加载该 so bundle 问题在于似乎没有编程方式来检
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • 修改字符数组,修改部分向后显示

    我刚刚开始学习汇编 我正在尝试修改字符数组 这是我的汇编代码 data data byte Five 0 code Asm proc lea rax data mov dword ptr rax Four ret Asm endp end
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual
  • .NET 4.0 迁移后引用 .NET 1.0 程序集的 System.TypeLoadException

    有一个项目从 NET 3 5 迁移到 NET 4 0 该项目有一些对 NET 1 0 程序集的引用 这些程序集是 COM 对象的包装器 这些 NET 1 0 程序集和 COM 对象是外部公司的产品 该项目可以编译 但在运行时 当软件引用这些
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2

随机推荐