I rewrote your function as a stand-alone script. It works okay.
#include <CommMG64.au3>
$Result = _SendAndRead(0x12345678, 4, 1)
MsgBox(0x0, "$iRet", "Result = " & $Result)
Func _SendAndRead($data, $numBytesToRead, $readType = 1)
Local $Initialized
$bBinData = Binary($data)
ConsoleWrite("Line " & @ScriptLineNumber & ": $bBinData = " & $bBinData & @CRLF)
$iNumbytes = BinaryLen($bBinData)
ConsoleWrite("Line " & @ScriptLineNumber & ": $iNumbytes = " & $iNumbytes & @CRLF)
$tBinData = DllStructCreate("byte["&$iNumbytes&"]")
;ConsoleWrite("Line " & @ScriptLineNumber & ": $tBinData = " & $tBinData & @CRLF)
DllStructSetData($tBinData, 1, $bBinData)
$iRet = _CommSendByteArray(DllStructGetPtr($tBinData),$iNumbytes,1)
If (@error Or $iRet = -1) And $Initialized = 1 Then MsgBox(0x0, "Error while sending", "!Error: " & @error, 1)
$iRet = _CommReadByteArray(DllStructGetPtr($tBinData),$numBytesToRead,$readType)
If (@error Or $iRet = -1) And $Initialized = 1 Then
MsgBox(0x0, "Error while reading", "!Error: " & @error, 1)
;Finalize()
EndIf
$iRet = DllStructGetData($tBinData, 1)
Return $iRet
EndFunc
Regards,
Alan