【发布时间】:2018-06-14 17:45:57
【问题描述】:
我正在尝试将 C++ DLL 作为二进制对象加载到我的 Ruby 应用程序中。
我已经使用regsrv32 注册了接口并使用Win32OLE 加载了Dll .. 但是如果我正在运行Ruby 的64 位变体,我无法加载32 位C++ dll,反之亦然。唯一有效的组合是
32 位 ruby 加载一个 32 位 C++ Dll。 64 位 ruby 加载 64 位 C++ Dll
我在这里看到的唯一可能的方法是分叉出一个 32 位 ruby 进程来通过 Win32OLE 注册和加载 32 位 dll。
【问题讨论】:
-
您需要同时注册 32 位和 64 位 dll
-
你是在暗示,
x86_64是某种薛定谔位吗?还是您只是假设,这意味着您的想法?这很可能不是它的真正含义。 -
忽略 x86_64 评论,这纯粹是我的思考过程。这些文章很有用,但在这里我试图从另一种语言 - Ruby 访问二进制对象。所以 CoCreateInstance() 不会有帮助。
-
如果您希望我们忽略该评论,请将其从您的问题中删除。至于
CoCreateInstance:COM 对象通常是这样实例化的。无论您是从 C、Delphi、Go 还是 Ruby 执行此操作都没有区别。在回避 COM 时不能使用 COM。这些是规则。你将不得不与他们达成协议。