Hola expertos,
Estamos intentando leer datos del puerto serie con la siguiente función que obtuvimos de internet.
El problema surge al crear el objeto con la sentencia CREATE OBJECT o_obj '"MSCOMMLib.MSComm.1"'.
Esto devuelve un sy-subrc = 2 y muestra la excepción NO_CREATE_OBJECT.
Ya copiamos el archivo MSCOMM32.OCX en c:\windows\system32 y lo registramos correctamente con regsvr32.exe.
Lo intentamos en Windows XP y Vista.
¿Alguien tiene alguna idea?
Gracias de antemano.
FUNCTION ZSERIALCOM.
*"----
"
"Interfaz local
*" IMPORTING
*" REFERENCE(MODE) TYPE I DEFAULT 0
*" REFERENCE(COMMPORT) TYPE I DEFAULT 1
*" REFERENCE(SETTINGS) TYPE C DEFAULT '2400,N,8,1'
*" REFERENCE(OUTPUT) TYPE C OPTIONAL
*" EXPORTING
*" REFERENCE(INPUT) TYPE C
*" EXCEPTIONS
*" NO_CREATE_OBJECT
*"----
TYPE-POOLS: sabc.
INCLUDE ole2incl.
PERFORM init.
PERFORM open_port USING commport settings.
IF mode = 0.
PERFORM read_port
CHANGING input.
ENDIF.
IF mode = 1.
PERFORM write_port
USING output
CHANGING input.
ENDIF.
PERFORM final.
ENDFUNCTION.
DATA: o_obj TYPE ole2_object.
&----
*& Form Init
&----
----
-
--> texto p1
-
<-- texto p2
----
FORM init.
DATA:
wa_repid LIKE sy-repid.
wa_repid = sy-repid.
CALL FUNCTION 'AUTHORITY_CHECK_OLE'
EXPORTING
program = wa_repid
activity = sabc_act_call
application = 'MSCOMMLib.MSComm.1'
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT o_obj '"MSCOMMLib.MSComm.1"'.
IF sy-subrc <> 0.
RAISE no_create_object.
ENDIF.
ENDFORM. " Init
----
----
----
-
--> COMMPORT *
-
--> SETTINGS *
----
FORM open_port USING commport settings.
SET PROPERTY OF o_obj