windows_com 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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