MAXScript Tools and Interaction with 3ds Max > Creating MAXScript Tools > ActiveX Controls in MAXScript Rollouts >

# 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.

#### See Also

- ActiveX Controls in MAXScript Rollouts