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 +4 -4
- data/RELNOTES.md +4 -0
- data/examples/DesktopGadget.rbw +2 -0
- data/examples/UIRibbon/Command.rbw +2 -1
- data/lib/windows_com/common.rb +19 -10
- data/screenshot.png +0 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bea6d25055bb37d4aa2c16bd5da878bd8917b815
|
4
|
+
data.tar.gz: ede87f79a9b521ad64dd83a0b022e3ba37952a92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64a0ff1e78884ca62f39e4016cf66cc1be78a26a5e71d61831fa6219c11d4a8473b98f74c38939caba893026d02d927b70757bfecf6a11463207c80a41702be6
|
7
|
+
data.tar.gz: 2ad4eda66fb2a0ad4759552d02b651a9dbc090c4b40b261cf5941fe3088ca7e91a4c842ccedc26323a29617380d49320562f4a5df71c0a8a77c037d5689d5a3e
|
data/RELNOTES.md
CHANGED
data/examples/DesktopGadget.rbw
CHANGED
data/lib/windows_com/common.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'ffi'
|
2
2
|
|
3
|
-
WINDOWS_COM_VERSION = '2.0.
|
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 =
|
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*
|
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
|
-
|
195
|
+
args.unshift(@vptr) # prepend *this* for Vtbl meth call
|
194
196
|
|
195
|
-
|
196
|
-
|
197
|
+
STDERR.puts [:vt_call, self.class, name, args].inspect if
|
198
|
+
WINDOWS_COM_TRACE_CALL_ARGS
|
197
199
|
|
198
|
-
|
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(
|
239
|
-
|
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}
|
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.
|
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-
|
11
|
+
date: 2017-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|