Project

General

Profile

Bug #12987

Win32 API.rb can not call function without argument.

Added by katonbo (Masahiro Kitajima) almost 4 years ago. Updated 16 days ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:49888]
Tags:

Description

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]

Updated by usa (Usaku NAKAMURA) almost 4 years ago

For workaround, you can use '' instead of '0'.

Updated by usa (Usaku NAKAMURA) almost 4 years ago

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

Updated by katonbo (Masahiro Kitajima) almost 4 years ago

Thank you very much.
I just learned that only nil was clearly stating that there are no arguments in the previous document.
I used a single 'V' to specify no arguments, so it was up to this idea.

Updated by jeremyevans0 (Jeremy Evans) 16 days ago

  • Status changed from Open to Closed

I tried with ruby 2.6.3p62 (2019-04-16 revision 67580) [i386-mingw32] and ruby 1.9.3p551 (2014-11-13) [i386-mingw32] and was able to call a function without an argument:

require 'Win32API'
getch = Win32API.new("C:\\Windows\\SysWOW64\\crtdll.dll", "_getch", [], 'L')
getch.Call
# => 97

So I think this can be closed.

Also available in: Atom PDF