ActiveX by-reference arguments for methods and events

Note:

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.