win 0.1.11 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/win/dde.rb +109 -15
- data/spec/win/dde_spec.rb +9 -1
- data/win.gemspec +1 -1
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.13
|
data/lib/win/dde.rb
CHANGED
@@ -62,6 +62,36 @@ module Win
|
|
62
62
|
XTYP_MASK = 0x00F0
|
63
63
|
XTYP_SHIFT = 0x0004
|
64
64
|
|
65
|
+
# Types Hash {TRANSACTION_TYPE=>'Type description')}
|
66
|
+
TYPES = {
|
67
|
+
XTYPF_NOBLOCK => 'XTYPF_NOBLOCK',
|
68
|
+
XTYPF_NODATA => 'XTYPF_NODATA',
|
69
|
+
XTYPF_ACKREQ => 'XTYPF_ACKREQ',
|
70
|
+
XCLASS_MASK => 'XCLASS_MASK',
|
71
|
+
XCLASS_BOOL => 'XCLASS_BOOL',
|
72
|
+
XCLASS_DATA => 'XCLASS_DATA',
|
73
|
+
XCLASS_FLAGS => 'XCLASS_FLAGS',
|
74
|
+
XCLASS_NOTIFICATION => 'XCLASS_NOTIFICATION',
|
75
|
+
XTYP_ERROR => 'XTYP_ERROR',
|
76
|
+
XTYP_ADVDATA => 'XTYP_ADVDATA',
|
77
|
+
XTYP_ADVREQ => 'XTYP_ADVREQ',
|
78
|
+
XTYP_ADVSTART => 'XTYP_ADVSTART',
|
79
|
+
XTYP_ADVSTOP => 'XTYP_ADVSTOP',
|
80
|
+
XTYP_EXECUTE => 'XTYP_EXECUTE',
|
81
|
+
XTYP_CONNECT => 'XTYP_CONNECT',
|
82
|
+
XTYP_CONNECT_CONFIRM=> 'XTYP_CONNECT_CONFIRM',
|
83
|
+
XTYP_XACT_COMPLETE => 'XTYP_XACT_COMPLETE',
|
84
|
+
XTYP_POKE => 'XTYP_POKE',
|
85
|
+
XTYP_REGISTER => 'XTYP_REGISTER',
|
86
|
+
XTYP_REQUEST => 'XTYP_REQUEST',
|
87
|
+
XTYP_DISCONNECT => 'XTYP_DISCONNECT',
|
88
|
+
XTYP_UNREGISTER => 'XTYP_UNREGISTER',
|
89
|
+
XTYP_WILDCONNECT => 'XTYP_WILDCONNECT',
|
90
|
+
XTYP_MONITOR => 'XTYP_MONITOR',
|
91
|
+
XTYP_MASK => 'XTYP_MASK',
|
92
|
+
XTYP_SHIFT => 'XTYP_SHIFT'
|
93
|
+
}
|
94
|
+
|
65
95
|
# Transaction confirmations:
|
66
96
|
|
67
97
|
# Transaction confirmation
|
@@ -147,6 +177,36 @@ module Win
|
|
147
177
|
# ?
|
148
178
|
MF_MASK = 0xFF000000
|
149
179
|
|
180
|
+
# Flags Hash {FLAG=>'Flag description')}
|
181
|
+
FLAGS = {
|
182
|
+
APPCLASS_STANDARD => 'APPCLASS_STANDARD',
|
183
|
+
APPCLASS_MONITOR => 'APPCLASS_MONITOR',
|
184
|
+
APPCLASS_MASK => 'APPCLASS_MASK',
|
185
|
+
APPCMD_CLIENTONLY => 'APPCMD_CLIENTONLY',
|
186
|
+
APPCMD_FILTERINITS => 'APPCMD_FILTERINITS',
|
187
|
+
APPCMD_MASK => 'APPCMD_MASK',
|
188
|
+
CBF_FAIL_SELFCONNECTIONS => 'CBF_FAIL_SELFCONNECTIONS',
|
189
|
+
CBF_FAIL_CONNECTIONS => 'CBF_FAIL_CONNECTIONS',
|
190
|
+
CBF_FAIL_ADVISES => 'CBF_FAIL_ADVISES',
|
191
|
+
CBF_FAIL_EXECUTES => 'CBF_FAIL_EXECUTES',
|
192
|
+
CBF_FAIL_POKES => 'CBF_FAIL_POKES',
|
193
|
+
CBF_FAIL_REQUESTS => 'CBF_FAIL_REQUESTS',
|
194
|
+
CBF_FAIL_ALLSVRXACTIONS => 'CBF_FAIL_ALLSVRXACTIONS',
|
195
|
+
CBF_SKIP_CONNECT_CONFIRMS => 'CBF_SKIP_CONNECT_CONFIRMS',
|
196
|
+
CBF_SKIP_REGISTRATIONS => 'CBF_SKIP_REGISTRATIONS',
|
197
|
+
CBF_SKIP_UNREGISTRATIONS => 'CBF_SKIP_UNREGISTRATIONS',
|
198
|
+
CBF_SKIP_DISCONNECTS => 'CBF_SKIP_DISCONNECTS',
|
199
|
+
CBF_SKIP_ALLNOTIFICATIONS => 'CBF_SKIP_ALLNOTIFICATIONS',
|
200
|
+
MF_HSZ_INFO => 'MF_HSZ_INFO',
|
201
|
+
MF_SENDMSGS => 'MF_SENDMSGS',
|
202
|
+
MF_POSTMSGS => 'MF_POSTMSGS',
|
203
|
+
MF_CALLBACKS => 'MF_CALLBACKS',
|
204
|
+
MF_ERRORS => 'MF_ERRORS',
|
205
|
+
MF_LINKS => 'MF_LINKS',
|
206
|
+
MF_CONV => 'MF_CONV',
|
207
|
+
MF_MASK => 'MF_MASK'
|
208
|
+
}
|
209
|
+
|
150
210
|
# Error codes:
|
151
211
|
|
152
212
|
# Returned if DDE Init successful
|
@@ -176,32 +236,36 @@ module Win
|
|
176
236
|
# - The application used a freed data handle or string handle.
|
177
237
|
# - More than one instance of the application used the same object.
|
178
238
|
DMLERR_INVALIDPARAMETER = 0x4006
|
179
|
-
#
|
239
|
+
# A DDEML application has created a prolonged race condition (in which the server application
|
240
|
+
# outruns the client), causing large amounts of memory to be consumed.
|
180
241
|
DMLERR_LOW_MEMORY = 0x4007
|
181
|
-
#
|
242
|
+
# A memory allocation has failed.
|
182
243
|
DMLERR_MEMORY_ERROR = 0x4008
|
183
|
-
#
|
244
|
+
# A transaction has failed.
|
184
245
|
DMLERR_NOTPROCESSED = 0x4009
|
185
|
-
#
|
246
|
+
# A client's attempt to establish a conversation has failed.
|
186
247
|
DMLERR_NO_CONV_ESTABLISHED = 0x400a
|
187
|
-
#
|
248
|
+
# A request for a synchronous poke transaction has timed out.
|
188
249
|
DMLERR_POKEACKTIMEOUT = 0x400b
|
189
|
-
#
|
250
|
+
# An internal call to the PostMessage function has failed.
|
190
251
|
DMLERR_POSTMSG_FAILED = 0x400c
|
191
|
-
#
|
252
|
+
# An application instance with a synchronous transaction already in progress attempted to initiate another
|
253
|
+
# synchronous transaction, or the DdeEnableCallback function was called from within a DDEML callback function.
|
192
254
|
DMLERR_REENTRANCY = 0x400d
|
193
|
-
#
|
255
|
+
# A server-side transaction was attempted on a conversation terminated by the client, or the server terminated
|
256
|
+
# before completing a transaction.
|
194
257
|
DMLERR_SERVER_DIED = 0x400e
|
195
|
-
#
|
258
|
+
# An internal error has occurred in the DDEML.
|
196
259
|
DMLERR_SYS_ERROR = 0x400f
|
197
|
-
#
|
260
|
+
# A request to end an advise transaction has timed out.
|
198
261
|
DMLERR_UNADVACKTIMEOUT = 0x4010
|
199
|
-
#
|
262
|
+
# An invalid transaction identifier was passed to a DDEML function. Once the application has returned from an
|
263
|
+
# XTYP_XACT_COMPLETE callback, the transaction identifier for that callback function is no longer valid.
|
200
264
|
DMLERR_UNFOUND_QUEUE_ID = 0x4011
|
201
265
|
# Last (highest) error code
|
202
266
|
DMLERR_LAST = DMLERR_UNFOUND_QUEUE_ID
|
203
267
|
|
204
|
-
# Hash {ERROR_CODE=>'Error description')}
|
268
|
+
# Errors Hash {ERROR_CODE=>'Error description')}
|
205
269
|
ERRORS = {
|
206
270
|
DMLERR_ADVACKTIMEOUT => 'A request for a synchronous advise transaction has timed out.',
|
207
271
|
DMLERR_BUSY => 'The response to the transaction caused the DDE_FBUSY flag to be set.',
|
@@ -643,7 +707,7 @@ module Win
|
|
643
707
|
# - DMLERR_NO_CONV_ESTABLISHED
|
644
708
|
# - DMLERR_NO_ERROR
|
645
709
|
# ---
|
646
|
-
# <b>
|
710
|
+
# <b>Enhanced (snake_case) API makes all args optional except for first (dde instance id), and returns nil if
|
647
711
|
# the function was unsuccessful.</b>
|
648
712
|
# ---
|
649
713
|
# *Remarks*
|
@@ -656,12 +720,39 @@ module Win
|
|
656
720
|
# whether the ANSI or Unicode version of the DdeInitialize function was called by the client application.
|
657
721
|
#
|
658
722
|
# :call-seq:
|
659
|
-
# conversation_handle = dde_connect( instance_id, [service =
|
723
|
+
# conversation_handle = dde_connect( instance_id, [service = 0, topic = 0, context = nil] )
|
660
724
|
#
|
661
725
|
function :DdeConnect, [:uint32, :ulong, :ulong, :pointer], :ulong, zeronil: true,
|
662
|
-
&->(api, instance_id, service =
|
726
|
+
&->(api, instance_id, service = 0, topic = 0, context = nil){
|
663
727
|
api.call(instance_id, service, topic, context) }
|
664
728
|
|
729
|
+
##
|
730
|
+
# The DdeDisconnect function terminates a conversation started by either the DdeConnect or DdeConnectList function
|
731
|
+
# and invalidates the specified conversation handle.
|
732
|
+
#
|
733
|
+
# [*Syntax*] BOOL DdeDisconnect( HCONV hConv );
|
734
|
+
#
|
735
|
+
# hConv:: [in, out] Handle to the active conversation to be terminated.
|
736
|
+
#
|
737
|
+
# *Returns*:: If the function succeeds, the return value is nonzero, otherwise zero. The DdeGetLastError function
|
738
|
+
# can be used to get the error code, which can be one of the following values:
|
739
|
+
# - DMLERR_DLL_NOT_INITIALIZED
|
740
|
+
# - DMLERR_NO_CONV_ESTABLISHED
|
741
|
+
# - DMLERR_NO_ERROR
|
742
|
+
# ---
|
743
|
+
# <b>Enhanced (snake_case) API returns *true/false* instead of nonzero/zero.</b>
|
744
|
+
# ---
|
745
|
+
# *Remarks*:
|
746
|
+
# Any incomplete transactions started before calling DdeDisconnect are immediately abandoned. The XTYP_DISCONNECT
|
747
|
+
# transaction is sent to the Dynamic Data Exchange (DDE) callback function of the partner in the conversation.
|
748
|
+
# Generally, only client applications must terminate conversations.
|
749
|
+
#
|
750
|
+
# :call-seq:
|
751
|
+
# success = dde_disconnect(conversation_handle)
|
752
|
+
#
|
753
|
+
function :DdeDisconnect, [:ulong], :int, boolean: true
|
754
|
+
|
755
|
+
|
665
756
|
##
|
666
757
|
# The DdeGetLastError function retrieves the most recent error code set by the failure of a Dynamic Data Exchange
|
667
758
|
# Management Library (DDEML) function and resets the error code to DMLERR_NO_ERROR.
|
@@ -674,6 +765,9 @@ module Win
|
|
674
765
|
# DMLERR_ADVACKTIMEOUT, DMLERR_EXECACKTIMEOUT, DMLERR_INVALIDPARAMETER, DMLERR_LOW_MEMORY, DMLERR_MEMORY_ERROR,
|
675
766
|
# DMLERR_NO_CONV_ESTABLISHED, DMLERR_NOTPROCESSED, DMLERR_POKEACKTIMEOUT, DMLERR_POSTMSG_FAILED, DMLERR_REENTRANCY,
|
676
767
|
# DMLERR_SERVER_DIED, DMLERR_SYS_ERROR, DMLERR_UNADVACKTIMEOUT, DMLERR_UNFOUND_QUEUE_ID
|
768
|
+
# ---
|
769
|
+
# <b>Enhanced (snake_case) API returns *nil* if the function was unsuccessful (that is, no DDE errors raised).</b>
|
770
|
+
# ---
|
677
771
|
#
|
678
772
|
# :call-seq:
|
679
773
|
# string = dde_get_last_error( instance_id )
|
data/spec/win/dde_spec.rb
CHANGED
@@ -231,9 +231,17 @@ module WinDDETest
|
|
231
231
|
end
|
232
232
|
|
233
233
|
describe '#dde_connect' do
|
234
|
-
|
234
|
+
spec{ use{ conversation_handle = DdeConnect( instance_id=0, service=0, topic=0, context=nil) }}
|
235
|
+
spec{ use{ conversation_handle = dde_connect( instance_id=0, service=0, topic=0, context=nil) }}
|
236
|
+
it 'connects to existing DDE server'
|
235
237
|
end
|
236
238
|
|
239
|
+
describe '#dde_disconnect' do
|
240
|
+
spec{ use{ success = DdeDisconnect(conversation_handle=0) }}
|
241
|
+
spec{ use{ success = dde_disconnect(conversation_handle=0) }}
|
242
|
+
|
243
|
+
it 'disconnects from existing DDE server'
|
244
|
+
end
|
237
245
|
end
|
238
246
|
end
|
239
247
|
end
|
data/win.gemspec
CHANGED