win 0.1.26 → 0.1.27
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.
- data/VERSION +1 -1
- data/lib/win/dde.rb +7 -7
- data/lib/win/library.rb +4 -4
- data/spec/win/dde_spec.rb +27 -18
- data/win.gemspec +2 -2
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.27
|
data/lib/win/dde.rb
CHANGED
@@ -281,7 +281,7 @@ module Win
|
|
281
281
|
DMLERR_EXECACKTIMEOUT => 'A request for a synchronous execute transaction has timed out.',
|
282
282
|
DMLERR_INVALIDPARAMETER => 'A parameter failed to be validated by the DDEML. Possible causes: ' +
|
283
283
|
'Application used a data handle initialized with a different item name handle than was required ' +
|
284
|
-
'by the transaction.' +
|
284
|
+
'by the transaction. ' +
|
285
285
|
'The application used a data handle that was initialized with a different clipboard data format ' +
|
286
286
|
'than was required by the transaction. ' +
|
287
287
|
'The application used a client-side conversation handle with server-side function or vice versa. ' +
|
@@ -755,7 +755,7 @@ module Win
|
|
755
755
|
&->(api, old_id=0, cmd, &block){
|
756
756
|
raise ArgumentError, 'No callback block' unless block
|
757
757
|
old_id = 0 unless old_id
|
758
|
-
id = FFI::MemoryPointer.new(:
|
758
|
+
id = FFI::MemoryPointer.new(:uint32).put_uint32(0, old_id)
|
759
759
|
status = api.call(id, block, cmd, 0)
|
760
760
|
id = status == 0 ? id.get_uint32(0) : nil
|
761
761
|
[id, status] }
|
@@ -779,7 +779,6 @@ module Win
|
|
779
779
|
#
|
780
780
|
function :DdeUninitialize, [:uint32], :int, boolean: true
|
781
781
|
|
782
|
-
|
783
782
|
##
|
784
783
|
# The DdeCreateStringHandle function creates a handle that identifies the specified string.
|
785
784
|
# A Dynamic Data Exchange (DDE) client or server application can pass the string handle as a
|
@@ -814,7 +813,8 @@ module Win
|
|
814
813
|
#
|
815
814
|
function :DdeCreateStringHandle, [:uint32, :pointer, :int], :ulong, zeronil: true,
|
816
815
|
&->(api, instance_id, string, code_page=CP_WINANSI){
|
817
|
-
|
816
|
+
string_pointer = FFI::MemoryPointer.from_string(string)
|
817
|
+
api.call(instance_id, string_pointer, code_page) }
|
818
818
|
|
819
819
|
##
|
820
820
|
# The DdeFreeStringHandle function frees a string handle in the calling application.
|
@@ -1117,7 +1117,7 @@ module Win
|
|
1117
1117
|
# data_handle = dde_client_transaction(data_pointer, size, conv, item, format, type, timeout, result)
|
1118
1118
|
#
|
1119
1119
|
function :DdeClientTransaction, [:pointer, :uint32, :ulong, :ulong, :uint, :uint, :uint32, :pointer],
|
1120
|
-
:HDDEDATA,
|
1120
|
+
:HDDEDATA, zeronil: true
|
1121
1121
|
|
1122
1122
|
##
|
1123
1123
|
# The DdeGetData function copies data from the specified Dynamic Data Exchange (DDE) object to the specified
|
@@ -1200,9 +1200,9 @@ module Win
|
|
1200
1200
|
#
|
1201
1201
|
function :DdeAccessData, [:HDDEDATA, :pointer], :pointer,
|
1202
1202
|
&->(api, data_handle){
|
1203
|
-
size_buffer = FFI::MemoryPointer.new(:
|
1203
|
+
size_buffer = FFI::MemoryPointer.new(:uint32)
|
1204
1204
|
buffer = api.call(data_handle, size_buffer)
|
1205
|
-
size = size_buffer.
|
1205
|
+
size = size_buffer.get_uint32(0)
|
1206
1206
|
size == 0 ? [nil, 0] : [buffer, size] }
|
1207
1207
|
# weird lambda literal instead of block is needed because RDoc goes crazy if block is attached to meta-definition
|
1208
1208
|
|
data/lib/win/library.rb
CHANGED
@@ -63,7 +63,7 @@ module Win
|
|
63
63
|
@namespace.send(@function_name.to_sym, *args)
|
64
64
|
end
|
65
65
|
|
66
|
-
|
66
|
+
# alias_method :[], :call
|
67
67
|
end
|
68
68
|
|
69
69
|
# Contains class methods (macros) that can be used in any module mixing in Win::Library
|
@@ -355,11 +355,11 @@ module Win
|
|
355
355
|
end
|
356
356
|
else
|
357
357
|
if zeronil
|
358
|
-
->(*args, &block){ (res = block ? block[api
|
358
|
+
->(*args, &block){ (res = block ? block[api.call(*args)] : api.call(*args)) != 0 ? res : nil }
|
359
359
|
elsif boolean
|
360
|
-
->(*args, &block){ block ? block[api
|
360
|
+
->(*args, &block){ block ? block[api.call(*args)] : api.call(*args) != 0 }
|
361
361
|
else
|
362
|
-
->(*args, &block){ block ? block[api
|
362
|
+
->(*args, &block){ block ? block[api.call(*args)] : api.call(*args) }
|
363
363
|
end
|
364
364
|
end
|
365
365
|
|
data/spec/win/dde_spec.rb
CHANGED
@@ -6,7 +6,7 @@ module WinDDETest
|
|
6
6
|
include Win::DDE
|
7
7
|
include Win::GUI::Message
|
8
8
|
|
9
|
-
POKE_STRING = "Poke_string
|
9
|
+
POKE_STRING = "Poke_string"
|
10
10
|
|
11
11
|
def dde_cmd
|
12
12
|
APPCLASS_STANDARD
|
@@ -346,31 +346,40 @@ module WinDDETest
|
|
346
346
|
before(:each) do
|
347
347
|
setup_server do |*args|
|
348
348
|
@server_calls << extract_values(*args)
|
349
|
-
@
|
349
|
+
@data_out, size = dde_get_data(args[5]) if args.first == XTYP_POKE || args.first == XTYP_EXECUTE
|
350
350
|
DDE_FACK
|
351
351
|
end
|
352
|
+
@conv_handle = dde_connect( @server_id, @service_handle, @topic_handle, context=nil)
|
353
|
+
@data_in = FFI::MemoryPointer.from_string POKE_STRING
|
352
354
|
end
|
353
355
|
after(:each) { teardown_server}
|
354
356
|
|
355
357
|
spec{ use{ DdeClientTransaction(data=nil, size=0, conv=0, item=0, format=0, type=0, timeout=0, result=nil) }}
|
356
358
|
spec{ use{ dde_client_transaction(data=nil, size=0, conv=0, item=0, format=0, type=0, timeout=0, result=nil) }}
|
357
359
|
|
360
|
+
|
361
|
+
it "returns 0/nil if initiated transaction unsuccessful" do
|
362
|
+
res = DdeClientTransaction(@data_in, @data_in.size, 1234, @topic_handle, CF_TEXT, XTYP_POKE, 1000, nil)
|
363
|
+
res.should == 0 # wrong conversation handle
|
364
|
+
res = dde_client_transaction(@data_in, @data_in.size, 1234, @topic_handle, CF_TEXT, XTYP_POKE, 1000, nil)
|
365
|
+
res.should == nil # wrong conversation handle
|
366
|
+
res = dde_client_transaction(@data_in, @data_in.size, @conv_handle, 0, CF_TEXT, XTYP_POKE, 1000, nil)
|
367
|
+
res.should == nil # wrong item handle (cannot be NULL in XTYP_POKE transaction)
|
368
|
+
@server_calls.any? {|call| call[0] == 'XTYP_POKE'}.should be_false
|
369
|
+
end
|
370
|
+
|
358
371
|
it "original api is used by CLIENT to begins a data transaction with server" do
|
359
|
-
|
360
|
-
str = FFI::MemoryPointer.from_string POKE_STRING
|
361
|
-
res = DdeClientTransaction(str, str.size, @conv_handle, @topic_handle, CF_TEXT, XTYP_POKE, 1000, nil)
|
372
|
+
res = DdeClientTransaction(@data_in, @data_in.size, @conv_handle, @topic_handle, CF_TEXT, XTYP_POKE, 1000, nil)
|
362
373
|
res.should == 1
|
363
|
-
@server_calls.any? {|call| call[0]
|
364
|
-
@
|
374
|
+
@server_calls.any? {|call| call[0] == 'XTYP_POKE'}.should be_true
|
375
|
+
@data_out.read_string.should == POKE_STRING.rstrip
|
365
376
|
end
|
366
377
|
|
367
378
|
it "snake_case api begins a data transaction between a client and a server" do
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
@server_calls.any? {|call| call[0] = 'XTYP_EXECUTE'}.should be_true
|
373
|
-
@data.read_string.should == POKE_STRING.rstrip
|
379
|
+
res = dde_client_transaction(@data_in, @data_in.size, @conv_handle, 0, 0, XTYP_EXECUTE, 1000, nil)
|
380
|
+
res.should be_true
|
381
|
+
@server_calls.any? {|call| call[0] == 'XTYP_EXECUTE'}.should be_true
|
382
|
+
@data_out.read_string.should == POKE_STRING.rstrip
|
374
383
|
end
|
375
384
|
end # describe dde_client_transaction
|
376
385
|
|
@@ -398,10 +407,10 @@ module WinDDETest
|
|
398
407
|
data, size = dde_get_data(data_handle)
|
399
408
|
data.should be_an FFI::MemoryPointer
|
400
409
|
data.read_string.should == POKE_STRING.rstrip
|
401
|
-
size.should ==
|
402
|
-
DdeGetData(data_handle, nil, 0, 0).should ==
|
410
|
+
size.should == 12
|
411
|
+
DdeGetData(data_handle, nil, 0, 0).should == 12
|
403
412
|
data = FFI::MemoryPointer.new(:char, 1024)
|
404
|
-
DdeGetData(data_handle, data, data.size, 0).should ==
|
413
|
+
DdeGetData(data_handle, data, data.size, 0).should == 12
|
405
414
|
data.read_string.should == POKE_STRING.rstrip
|
406
415
|
end
|
407
416
|
DDE_FACK
|
@@ -442,10 +451,10 @@ module WinDDETest
|
|
442
451
|
data, size = dde_access_data(data_handle)
|
443
452
|
data.should be_kind_of FFI::Pointer
|
444
453
|
data.read_string.should == POKE_STRING.rstrip
|
445
|
-
size.should ==
|
454
|
+
size.should == 12
|
446
455
|
buf = FFI::MemoryPointer.new(:int16)
|
447
456
|
data = DdeAccessData(data_handle, buf)
|
448
|
-
buf.get_int16(0).should ==
|
457
|
+
buf.get_int16(0).should == 12
|
449
458
|
data.should be_kind_of FFI::Pointer
|
450
459
|
data.read_string.should == POKE_STRING.rstrip
|
451
460
|
dde_unaccess_data(data_handle)
|
data/win.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{win}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.27"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["arvicco"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-23}
|
13
13
|
s.description = %q{Rubyesque interfaces and wrappers for Windows API functions pre-defined using FFI }
|
14
14
|
s.email = %q{arvitallian@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- arvicco
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-23 00:00:00 +03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|