Bug #16116

ruby2.6.3(x86/x64) use win32ole could not new Object, return 0x80070057

Added by whdukewu (Kewu DU) over 1 year ago. Updated 3 months ago.

Target version:
ruby -v:
ruby 2.6.3p62 (2019-04-16 revision 67580) [i386-mingw32]


I build a RubyTest.dll by C#, In ruby2.2, I could use to create ole object, but in the same system under ruby2.6.3, it failed to create ole object by, is there any different between ruby 2.2 and ruby 2.6.3 in WIN32OLE?

OS: Win7 Profressional SP1 64bit

/////// Ruby 2.6.3 use WIN32OLE failed to load dll //////////
C:\Ruby26\bin>ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [i386-mingw32]

irb(main):001:0> require 'win32ole'
=> true
Traceback (most recent call last):
6: from C:/Ruby26/bin/irb.cmd:31:in <main>'
5: from C:/Ruby26/bin/irb.cmd:31:in
4: from C:/Ruby26/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in <top (require
3: from (irb):2
2: from (irb):2:in
1: from (irb):2:in initialize'
WIN32OLERuntimeError (failed to create WIN32OLE object from
** HRESULT error code:0x80070057
The parameter is incorrect.**

c:\TestTools\impeller\lib\Ruby\bin>ruby -v
ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32]

/////// Ruby 2.2 use WIN32OLE success load dll //////////
irb(main):001:0> require 'win32ole'
=> true
@@@DllTest Constructor
=> #WIN32OLE:0x7418b68

Updated by jeremyevans0 (Jeremy Evans) 9 months ago

  • Status changed from Open to Feedback

It's hard to debug issues like this without having a self contained reproducible example. Can you provide a self contained reproducible example showing the problem? Basic testing of WIN32OLE using Ruby 2.6 on Windows 10 with the examples in the documentation (which use Excel.Application) work fine, so this doesn't appear to be a general problem with WIN32OLE.


Updated by jeremyevans0 (Jeremy Evans) 8 months ago

  • Status changed from Feedback to Closed

Updated by whdukewu (Kewu DU) 3 months ago

finally we solve this problem by this way:

  1. add mscoree.dll to windows registry key ** \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** **
  2. restart windows systems

then we can load dll files in ruby 2.6.3.

The dll developed by C# language depend mscoree.dll, in ruby2.2, windows system can search the mscoree.dll successfully, but in ruby2.6, it fails to search mscoree.dll when call the method, CoCreateInstance function in win32ole.c returns 0x80070057, this indicates some parameter is invalid, we don't know why this happen, even we set RUBY_DLL_PATH, it failed to load C# dll files.

Updated by larskanis (Lars Kanis) 3 months ago

whdukewu (Kewu DU) Can you provide a reproducible example of such a C# DLL? We got several issues with WIN32OLE at RubyInstaller, but I wasn't able to reproduce them - mostly because they depend on some proprietary COM DLLs. Your use case seems easy enough to be usable for investigation of the issue.

Also available in: Atom PDF