Project

General

Profile

Actions

Bug #16116

closed

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

Added by whdukewu (Kewu DU) over 4 years ago. Updated over 2 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.3p62 (2019-04-16 revision 67580) [i386-mingw32]
[ruby-core:94481]
Tags:

Description

I build a RubyTest.dll by C#, In ruby2.2, I could use WIN32OLE.new to create ole object, but in the same system under ruby2.6.3, it failed to create ole object by WIN32OLE.new, 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]

C:\Ruby26\bin>irb
irb(main):001:0> require 'win32ole'
=> true
irb(main):002:0> WIN32OLE.new('RubyTest.DllTest')
Traceback (most recent call last):
6: from C:/Ruby26/bin/irb.cmd:31:in <main>' 5: from C:/Ruby26/bin/irb.cmd:31:in load'
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 new'
1: from (irb):2:in initialize' WIN32OLERuntimeError (failed to create WIN32OLE object from RubyTest.DllTest')
** HRESULT error code:0x80070057
The parameter is incorrect.**
irb(main):003:0>

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 //////////
c:\TestTools\impeller\lib\Ruby\bin>irb
irb(main):001:0> require 'win32ole'
=> true
irb(main):002:0> WIN32OLE.new('RubyTest.DllTest')
@@@DllTest Constructor
=> #WIN32OLE:0x7418b68
irb(main):003:0>


Files

ClassLibraryForRuby.zip (1.55 KB) ClassLibraryForRuby.zip krolchatina (Dmitry Kirillov), 08/11/2021 07:58 AM

Updated by jeremyevans0 (Jeremy Evans) almost 4 years 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.

Actions #2

Updated by jeremyevans0 (Jeremy Evans) over 3 years ago

  • Status changed from Feedback to Closed

Updated by whdukewu (Kewu DU) over 3 years 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 WIN32OLE.new 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) over 3 years 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.

Updated by krolchatina (Dmitry Kirillov) over 2 years ago

I have the same issue with Ruby 3.0.2 and .NET COM assemblies. The problem seems to be related to how the assembly is registered: If InprocServer32/Default contains the full path to mscoree.dll (C:\Windows\system32\mscoree.dll) there is no problem with WIN32OLE.new
If InprocServer32/Default contains only mscoree.dll (which seems to be the default nowadays), WIN32OLE.new fails with "HRESULT error code:0x80070057 / The parameter is incorrect."

I created a small assembly that demonstrates the problem. The assembly can be built using "dotnet build" command.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0