Issue #12987 has been updated by Usaku NAKAMURA.

Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED

----------------------------------------
Bug #12987: Win32 API.rb can not call function without argument.
https://bugs.ruby-lang.org/issues/12987#change-61774

* Author: Masahiro Kitajima
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 
* Backport: 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED
----------------------------------------
In Win32API.rb, it is not possible to call a function without arguments.
I could avoid it for the time being if I did the following (against trunk).

~~~
diff --git a/ext/win32/lib/Win32API.rb b/ext/win32/lib/Win32API.rb
index d03ecc1..946be3e 100644
--- a/ext/win32/lib/Win32API.rb
+++ b/ext/win32/lib/Win32API.rb
@@ -17,6 +17,7 @@ class Win32API
   def initialize(dllname, func, import, export = "0", calltype = :stdcall)
     @proto = [import].join.tr(WIN32_TYPES, DL_TYPES).sub(/^(.)0*$/, '\1')
     import = @proto.chars.map {|win_type| TYPEMAP[win_type.tr(WIN32_TYPES, DL_T
+    @proto = "" if @proto == "0"
     export = TYPEMAP[export.tr(WIN32_TYPES, DL_TYPES)]
     calltype = Fiddle::Importer.const_get(:CALL_TYPE_TO_ABI)[calltype]
~~~



-- 
https://bugs.ruby-lang.org/