Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Como descifrar valores de COM-EXCEPTION


Kuk
18 de abril de 2015, 19:15
Siempre me ha interesado el tema, ya que uso COM/OLE de vez en cuando para generar archivos EXCEL y otras cosas (como crear instancias de clases CodeJock).

Lo que no me queda claro es como saber los valores que devuelve COM-EXCEPTION. Segun mis observaciones, cada objeto tiene diferentes errores, y se necesitan campos de diferente congitud para recibir los errores.

Pues eso, a ver que sabeis del tema amigos.

:hi:

Rapinto
20 de abril de 2015, 00:47
Kuk,

Será isto que pretendes???

WORKING-STORAGE SECTION.
01 LINHA PIC X(1024).
01 OLE-ERR-METHOD PIC X(256).
01 OLE-ERR-INFO.
03 OLE-ERR-TYPE PIC X(001).
03 OLE-ERR-WCODE PIC X(002).
03 ROLE-ERR-WCODE REDEFINES OLE-ERR-WCODE PIC S9(04) COMP-5.
03 OLE-ERR-SCODE PIC X(004).
03 ROLE-ERR-SCODE REDEFINES OLE-ERR-SCODE PIC S9(09) COMP-5.

PROCEDURE DIVISION.
DECLARATIVES.
OLE-ERRO SECTION.
USE AFTER EXCEPTION OLE-EX.
INVOKE EXCEPTION-OBJECT "GET-ERROR-TYPE"
RETURNING OLE-ERR-TYPE.
IF OLE-ERR-TYPE = "1"
INVOKE EXCEPTION-OBJECT "GET-SCODE" RETURNING ROLE-ERR-SCODE
INVOKE EXCEPTION-OBJECT "GET-SCODE-TEXT" RETURNING LINHA
MOVE LINHA TO OLE-ERR-METHOD
******** MOVE POW-FALSE TO "xlFileStatus" OF POW-SELF
******** MOVE 0 TO "MousePointer" OF POW-SELF
******** MOVE "N" TO FILEOPEN
GO TO MAIN-99-EXIT
ELSE
INVOKE EXCEPTION-OBJECT "GET-WCODE" RETURNING OLE-ERR-WCODE
INVOKE EXCEPTION-OBJECT "GET-SCODE" RETURNING OLE-ERR-SCODE
***** MOVE 0 TO "MousePointer" OF POW-SELF.
***** MOVE "N" TO FILEOPEN
GO TO MAIN-99-EXIT.
END DECLARATIVES.


Espero que te ajude.
Saludos,
Rui Pinto

Kuk
20 de abril de 2015, 09:44
Rapinto, si a eso me refiero. Pero funciona igual para todos los objetos COM? O dependiendo del objeto la estructura OLE-ERR-INFO varia?

Rapinto
20 de abril de 2015, 12:54
Kuk,

Nos testes que fiz, as Declarativas devolvem sempre naquele formato:
- Um código de Erro
- Um texto do Erro
Pode é ser um tipo de erro "S" ou um tipo de erro "W".

Os códigos de Erro são difíceis de encontrar. O que vou fazendo, é provocar o erro de propósito, em cada INVOKE, e ver qual o numero que devolve e qual o texto.

Saludos,
Rui A. Pinto

Kuk
20 de abril de 2015, 13:07
Rapinto, cual es la diferencia ente S y W? SIempre devuelve ambos o solo puede haber 1 infromado?

Yo recuerdo que hice unas pruebas (no me acuerdo con que objeto), y ahi no me devolvia ni codigo ni texto... Aunque utilizaba la misma estructura que tu. Puede ser que algun objeto no tenga codigo de errores? Me pareceria muy extraño si no los tuviera!!!

Existen codigos genericos? Tipo "Clase inexistente" y similares, o cada objeto tiene sus propios codigos y textos (si es que los tiene) ?

Ah, otra cosa. Hay alguna diferencia entre si declaras como COM:


CLASS COM AS "*COM".


Y si declaras como OLE:


CLASS COM AS "*OLE".


Porque ambos funcionan bien, pero no se si hay una diferencia.

Rapinto
20 de abril de 2015, 18:36
Kuk,

Object Linking and Embedding = OLE2

Component Object Model = COM

Em Fujitsu COBOL não há diferença nenhuma. Fazem exatamente a mesma coisa.

Anexo uma "pequena" !!!! lista de alguns dos erros.
Saludos,
Rui