ActiveX Controls have been deprecated by Microsoft in the latest versions of the Windows operating system in favor of the DotNet framework and its controls.
While MAXScript still supports ActiveX controls, these have to be installed and registered on the system to be accessible to MAXScript.
As a replacement of ActiveX controls, MAXScript supports DotNet controls in 3ds Max 9 and higher.
The following example will not work unless the used ActiveX control is installed on your system.
ActiveX supports by-reference arguments for methods and events since 3ds Max 5.1.
EXAMPLE
rollout winsockTester "Winsock Tester" ( activeXControl axWinsock "{248DD896-BB45-11CF-9ABC-0080C7E7B78D}" align:#left edittext txt text:"mail.iwaynet.net" offset:[-12, 0] fieldwidth:90 edittext txt2 "Port:" text:"110" offset:[8, -2] button btn "Connect" width:90 height:16 offset:[0, 2] button btn2 "Disconnect" width:90 height:16 offset:[0, -2] enabled:false -- some data has arrived.. on axWinsock DataArrival bytes do ( format "% bytes received.\n" bytes local wsckData = "" -- initialize to a string p = axWinsock.getdata &wsckdata -- by-reference argument format "Data: %\n" wsckData ) -- connected to remote host on axWinsock Connect do ( format "Connected.\n" btn2.enabled = true btn.enabled = false ) -- connect! on btn pressed do ( axWinsock.connect txt.text txt2.text format "Connecting ...\n" ) -- disconnect on btn2 pressed do ( axWinsock.close() format "Connection closed.\n" btn2.enabled = false btn.enabled = true ) ) createdialog winsockTester 100 115
By-reference arguments are preceded with a '&' in showMethods and showEvents.
FOR EXAMPLE
showmethods winsockTester.axWinsock .Connect RemoteHost:undefined RemotePort:undefined .Listen() .Accept requestID:integer .SendData data:undefined .GetData &data:undefined type:undefined maxLen:undefined .PeekData &data:undefined type:undefined maxLen:undefined .Close() .Bind LocalPort:undefined LocalIP:undefined
Since the value type for the 'data' argument for GetData and PeekData is 'unknown', we have to pass a value type that the ActiveX control knows how to handle. In this case, the methods want a buffer where they can store data, and they know how to deal with a string value. That is why we initialized variable wsckData to a null string.