windows_com 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79365cec9cf59dcbbfa1e01800a75d4da9ac1823
4
- data.tar.gz: 5a5b303116664c5be8fd5f010066e226d2f35082
3
+ metadata.gz: bea6d25055bb37d4aa2c16bd5da878bd8917b815
4
+ data.tar.gz: ede87f79a9b521ad64dd83a0b022e3ba37952a92
5
5
  SHA512:
6
- metadata.gz: b73bae98990bbd2dd412d1d4bdd0db6c36126015db6ea9051ea1fde0739a8188f54482c15fc034fdd010bfa636198b729c4b3d39533abb3dc711903c6a8f30a9
7
- data.tar.gz: ebbba18335f2adc9152950c2ba421f97cd9a2f12297c7d5fa0d8e2c9b37fb9a8b2574b355587584daa39b103845f3ba1e5be82a7a5d09e20942f9edd0a570ad3
6
+ metadata.gz: 64a0ff1e78884ca62f39e4016cf66cc1be78a26a5e71d61831fa6219c11d4a8473b98f74c38939caba893026d02d927b70757bfecf6a11463207c80a41702be6
7
+ data.tar.gz: 2ad4eda66fb2a0ad4759552d02b651a9dbc090c4b40b261cf5941fe3088ca7e91a4c842ccedc26323a29617380d49320562f4a5df71c0a8a77c037d5689d5a3e
data/RELNOTES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Release Notes
2
2
 
3
+ ## 2.0.2
4
+
5
+ Implement the ability to trace COM call arguments (set WINDOWS_COM_TRACE_CALL_ARGS)
6
+
3
7
  ## 2.0.1
4
8
 
5
9
  Allow COMInterface_ instances to be passed to code expecting pointers without calling #vptr
@@ -1,3 +1,5 @@
1
+ #WINDOWS_COM_TRACE_CALL_ARGS = true
2
+
1
3
  require 'windows_com'
2
4
 
3
5
  include WindowsCOM
@@ -1,7 +1,8 @@
1
1
  #WINDOWS_COM_TRACE_CALLBACK_REFCOUNT = true
2
+ #WINDOWS_COM_TRACE_CALL_ARGS = true
2
3
 
3
4
  require 'windows_gui'
4
- require 'windows_gui/uiribbon' # requires windows_com gem
5
+ require 'windows_gui/uiribbon'
5
6
 
6
7
  include WindowsGUI
7
8
  include UIRibbon
@@ -1,9 +1,11 @@
1
1
  require 'ffi'
2
2
 
3
- WINDOWS_COM_VERSION = '2.0.1'
3
+ WINDOWS_COM_VERSION = '2.0.2'
4
4
 
5
5
  WINDOWS_COM_OLE_INIT = true unless defined?(WINDOWS_COM_OLE_INIT)
6
+
6
7
  WINDOWS_COM_TRACE_CALLBACK_REFCOUNT = false unless defined?(WINDOWS_COM_TRACE_CALLBACK_REFCOUNT)
8
+ WINDOWS_COM_TRACE_CALL_ARGS = false unless defined?(WINDOWS_COM_TRACE_CALL_ARGS)
7
9
 
8
10
  module WindowsCOM
9
11
  extend FFI::Library
@@ -17,7 +19,7 @@ module WindowsCOM
17
19
  end
18
20
 
19
21
  def DetonateHresult(name, *args)
20
- hresult = send(name, *args)
22
+ hresult = __send__(name, *args)
21
23
  failed = FAILED(hresult)
22
24
 
23
25
  raise "#{name} failed (hresult: #{format('%#08x', hresult)})" if failed
@@ -151,7 +153,7 @@ module WindowsCOM
151
153
  module COMVtbl_
152
154
  def self.[](parent_vtbl, spec)
153
155
  spec.each { |name, sig|
154
- sig[0].unshift(:pointer) # prepend *this* pointer to FFI func signature
156
+ sig[0].unshift(:pointer) # prepend *this* to FFI func signature
155
157
  }
156
158
 
157
159
  Class.new(FFI::Struct) {
@@ -190,12 +192,12 @@ module WindowsCOM
190
192
 
191
193
  self::Vtbl.members.each { |name, sig|
192
194
  define_method(name) { |*args|
193
- hresult = @vtbl[name].call(@vptr, *args)
195
+ args.unshift(@vptr) # prepend *this* for Vtbl meth call
194
196
 
195
- raise "#{self}.#{name} failed (hresult: #{format('%#08x', hresult)})" if
196
- WindowsCOM::FAILED(hresult)
197
+ STDERR.puts [:vt_call, self.class, name, args].inspect if
198
+ WINDOWS_COM_TRACE_CALL_ARGS
197
199
 
198
- hresult
200
+ @vtbl[name].call(*args)
199
201
  }
200
202
  }
201
203
  }
@@ -234,9 +236,16 @@ module WindowsCOM
234
236
  def initialize
235
237
  @vtbl = self.class::Vtbl.new
236
238
  @vtbl.members.each { |name|
239
+ params, ret = @vtbl.class::Spec[name]
240
+
237
241
  @vtbl[name] = instance_variable_set("@__ffi_func__#{name}",
238
- FFI::Function.new(*@vtbl.class::Spec[name].reverse, convention: :stdcall) { |*args|
239
- __send__(name, *args[1..-1]) # remove *this* pointer from Ruby meth call
242
+ FFI::Function.new(ret, params, convention: :stdcall) { |*args|
243
+ args.shift # remove *this* for Ruby meth call
244
+
245
+ STDERR.puts [:rb_call, self.class, name, args].inspect if
246
+ WINDOWS_COM_TRACE_CALL_ARGS
247
+
248
+ __send__(name, *args)
240
249
  }
241
250
  )
242
251
  }
@@ -282,7 +291,7 @@ module WindowsCOM
282
291
  @vtbl.pointer.free
283
292
  @vptr.pointer.free
284
293
 
285
- STDERR.puts "#{self} refcount is 0, #{@vtbl} and #{@vptr} freed" if
294
+ STDERR.puts "#{self}.@#{@vtbl} freed\n#{self}.@#{@vptr} freed" if
286
295
  $DEBUG || WINDOWS_COM_TRACE_CALLBACK_REFCOUNT
287
296
  end
288
297
 
data/screenshot.png CHANGED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: windows_com
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Radoslav Peev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-02 00:00:00.000000000 Z
11
+ date: 2017-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi