在64位ruby中使用的Win32OLE无法加载32位C ++ Dll

时间:2018-01-04 22:46:46

标签: c++ ruby winapi dll

我正在尝试在我的Ruby应用程序中加载一个C ++ DLL作为二进制对象。 我已使用regsrv32注册了接口并使用Win32OLE加载了Dll ..但如果我运行的是64位的Ruby变体,我无法加载32位C ++ dll,反之亦然。唯一有效的组合是

  

32位ruby加载32位C ++ Dll。 64位ruby加载64位C ++ Dll

我在这里看到的唯一可行方法是分叉32位ruby进程,通过Win32OLE注册并加载32位dll。

1 个答案:

答案 0 :(得分:0)

老问题,但到目前为止还没有答案,所以我尝试:)。

由于ruby使用的是64位,而您的COM +可能是32位,因此它将无法在库模式下运行。

要解决此问题,您需要注册COM +组件,然后在dcomcnfg.exe中将dll设置到服务器应用程序。

enter image description here

这将在32位dllhost.exe中运行您的dll,然后ruby可以通过dll = WIN32OLE.new("your.dll")成功调用您的DLL

注意:您可能需要设置一个额外的ID。