Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Compilador] Añadir más controles a PowerCOBOL v3 (https://www.cobolforo.es/showthread.php?t=234)

Eslopes 11 de septiembre de 2015 04:30

Olá,

selecionei a DLL MSXML.DLL que vem com o Windows (desde XP). Criei o seguinte OCB

Código COBOL:
  1. 000010 IDENTIFICATION    DIVISION.
  2. 000020 CLASS-ID.     POWXML.
  3. 000030 ENVIRONMENT   DIVISION.
  4. 000040 CLASS         SECTION.
  5. 000050     INHERIT POWFUND EXTERNAL.        *> ƒNƒ‰ƒXŒp³‚Ì‹Lq
  6. 000060 DATA      DIVISION.
  7. 000070 CLASS         SECTION.
  8.  
  9. 000100 PROCEDURE    DIVISION.
  10.  
  11. 001010     FUNCTION LOAD (BY CONTENT TYPE IS ALPHANUMERIC PIC X(256)) IS EXTERNAL
  12. 001020          REPLACING NAME BY "XPOWIXMLDOMDOCLOADXML" .
  13. 001090 END CLASS POWXML.
A DLL possui centenas de métodos então selecionei um dos mais fáceis e importantes: IXMLDOMDocument::loadXML. Este método recebe uma string com o caminho no sistema operacional onde está o arquivo XML e carrega o mesmo em memória, realizando o parse (depois poderemos buscar informações no XML).

Estou sugerindo o nome de método do Power abaixo

XPOWIXMLDOMDOCLOADXML

Este método deverá substituir a chamada do método, seguindo o exemplo:
Código COBOL:
  1. 01 filename pic x(256) value "c:\book.xml".
  2.  
  3. call LOAD OF MSXML USING filename

deve resultar na compilação em :

Código COBOL:
  1. CALL "XPOWIXMLDOMDOCLOADXML" WITH STDCALL USING BY CONTENT filename

Alguns problemas que vejo:

Onde será definido XPOWIXMLDOMDOCLOADXML ?
Quem gera o código final ? O power?
Como inserir o objeto MSXML na ventana "Item box" do Power?

Saludos, Emerson

Kuk 11 de septiembre de 2015 11:02

Eslopes, la mayoría de las cosas que dices yo nunca las he necesitado. También creo que no es correcto exigir a un entorno ser "multitarea". En mi opinión, esta globalización no es buena, porque finalmente las herramientas dejan de ser fuertes en su perfil y se convierten en algo muy pesado y totalmente superficial. Se pierde contacto con la programación verdadera.

Cita:

Citación del post de Eslopes (Mensaje 1023)
1. Incapacidade de lidar com network (Web Services SOAP/REST, Sockets, Remote Method Invocation etc)

En esto no estoy de acuerdo, al menos hablando de PowerCOBOL 9. Existe OCX de socket de Microsoft que funciona perfectamente con Power. SOAP y WebService se puede concetar por OLE (también hay un ejemplo de Rui en el Foro)

Cita:

Citación del post de Eslopes (Mensaje 1023)
Dificuldade para lidar com XML

Esto yo nunca lo he necesitado! Para qué quieres esto? XML no lo necesitamos, se necesita en Mainframe para interactuar con pantallas Java Swing.

En fin, en mi opinión si se hace una WEB, se debe hacer en entorno WEB y no en COBOL. Otra cosa es que me gusta el código "nativo" para evitar incompatibilidades en el futuro. Mira los controles propios de Power 3 aún funcionan en Windows 7. Los Frameworks cada vez se hacen más grandes y esto supone mayor problema de compatibilidad y de bugs.

Los VCL se basan en código "nativo", y proporcionan un montón de posibilidades! No sé si todo lo que tu describes, pero hay muchísimos controles incluidos Sockets-TCP/IP, Grids y etc.

Echale un vistazo:
VCL Components| Windows UI Controls | Konopka
VCL Components Categories Index - RAD Studio

Bueno, al final nos hemos ido a un tema muy amplio abandonando el tema de inicio. Qué hacemos con el Power 3? Intentamos ampliarlo o no? ;)

Eslopes 11 de septiembre de 2015 12:47

Olá,

nenhum comentário sobre o OCB?

Saludos, Emerson

Kuk 11 de septiembre de 2015 13:32

Eslopes, no había visto tu respuesta porque te había contestado justo al mismo tiempo.

A ver, el MSXML.DLL no vale, porque es un control ActiveX. Exporta las funciones siguientes:
  • DllCanUnloadNow
  • DllGetClassObject
  • DllRegisterServer
  • DllUnregisterServer

Nos hacen falta Win32 Control Library (Windows), como COMCTL.DLL la cual exporta las funciones C/C++ como las siguientes:
  • CreateToolbar
  • CreatePropertySheetPageA
  • FlatSB_EnableScrollBar
  • ImageList_Add
  • etc...

Usar la COMCTL32.DLL es un poco pronto, porque tiene muchos controles dentro y nos vamos a morir escribiendo OCB-s, demasiado temprano. Hay que mirar un control separado, como MaskEdit o algo similar que sea sólo uno en la DLL.

En cuanto al OCB, la parte REPLACING NAME BY "XPOWIXMLDOMDOCLOADXML" debe contener la función en la DLL. Es decir, las DLL de Power exportan funciones con nombres que empiezan con XPOW... Pero, si estuviéramos metiendo el COMCTL32.DLL, por ejemplo lara ImageList sería:

Código COBOL:
  1.     000010 IDENTIFICATION    DIVISION.
  2.     000020 CLASS-ID.     POWIMGLIST.
  3.     000030 ENVIRONMENT   DIVISION.
  4.     000040 CLASS         SECTION.
  5.     000050     INHERIT POWFUND EXTERNAL.        *> ƒNƒ‰ƒXŒp³‚Ì‹Lq
  6.     000060 DATA   DIVISION.
  7.     000070 CLASS         SECTION.
  8.      
  9.     000100 PROCEDURE    DIVISION.
  10.      
  11.     001010     FUNCTION ADD (BY CONTENT TYPE IS ALPHANUMERIC PIC X(256)) IS EXTERNAL
  12.     001020      REPLACING NAME BY "ImageList_Add" .
  13.               ...

Pero bueno, los OCB-s los necesitaremos después. De momento tengo que mirar:
Cita:

Citación del post de Eslopes (Mensaje 1024)
Como inserir o objeto MSXML na ventana "Item box" do Power?

Estoy mirándolo. Creo que si la DLL y su *.LIB son correctas, se carga sólo en el ItemBox. Ya te contaré. Lo de los OCB-s lo dije un poco temprano porque no sabía que habría alguien tan rápido en contestar ;)

Eslopes 11 de septiembre de 2015 16:20

Olá,

agora entendi a proposta. Acho que é possível montar um programa para gerar os OCBs para o caso do MSCOMCTL. Vou pesquisar um pouco e dou um retorno.

Sobre XML, o governo brasileiro faz muitas exigências legais aos desenvolvedores de aplicações que emitem notas fiscais, forçando as aplicações a lerem e gerarem arquivos XMLs, consumir Web Services etc.

Saludos, Emerson

Kuk 11 de septiembre de 2015 16:27

2 Archivos Adjunto(s)
Tengo 2 noticias, una buena y una mala :cerv: :D

La buena - ya he encontrado cómo va el tema.
La mala - no se puede usar los controles directamente. Habrá que crear una DLL intermediaria en C/C++ la cual va a interactuar con los controles (por ejemplo Comdlg32.dll). ¿Por qué? Porque al indicar la DLL y la LIB correspondiente en el registro, nos salta el error que sale en adjuntos. Hurgando el PowerCOBOL he visto que lo que hace es cargar la DLL indicada y busca:

Código CPP:
  1. HRSRC WINAPI FindResource(
  2.   _In_opt_ HMODULE hModule,
  3.   _In_     LPCTSTR lpName,
  4.   _In_     LPCTSTR lpType
  5. );

Donde lpName = "ITEMLIST". He mirado con el PE Explorer y he encontrado dentro de las DLL-s de controles que vienen con Power (en este caso F5BBRUN2.DLL) y me he encontrado con que tiene el segmento RC Data en el cual contiene un recurso llamado ITEMLIST (ver imagen en adjuntos). Mirando este recurso en Hex, casualmente he visto que hay una cadena con nulos y caracteres "raros", luego el identificador de la DLL (F5BBRUNS), y luego justamente los nombres de los OCB-s.


Quedan cosas a investigar, pero estamos avanzando.

Eslopes 11 de septiembre de 2015 20:19

Olá,

muy bueno. Talvez definindo uma classe C++ seja possível utilizar componentes visuais que possam ser adicionados a um form e que possuam uma caixa de diálogo para definir propriedades (como se fosse um componentes padrão do Power).

Saludos, Emerson

Kuk 11 de septiembre de 2015 22:06

Eslopes, claro, es lo que pensaba hacer. Lo que pasa es que no sé nada de cómo de realizan los controles de este tipo. Antes hacía OCX para PC9, pero ActiveX es totalmente otra historia. Tengo que leer cierta documentación para aclararme con ello.

No diría que veo luz al final del túnel de momento :D Pero al menos ya estamos dentro del túnel! ;)

Eslopes 12 de septiembre de 2015 01:45

:rofl::rofl::rofl::rofl::rofl::rofl:

Kuk 14 de septiembre de 2015 09:50

1 Archivos Adjunto(s)
He instalado el Visual Studio... Antes hace unos años lo había instalado y no me ha gustado. Confirmo la opinión de antes, es el IDE menos intuitivo del mundo! Los IDE-s de Borland y ahora Embarcadero son mucho mejores! No me he enterado de nada del Visual Studio, vaya castaña...

Investigando un poco más el tema, he encontrado que los métodos, las propiedades y los eventos también residen escritos dentro de la DLL (imagen en Adjuntos).

Entonces, yo creo que queda por investigar las Funciones que hay en la DLL comunes para todas las DLL las cuales son llamadas por PowerCOBOL de manera implícita. Luego, habrá que descifrar estas Funciones (con el decompilador seguramente), para encontrar funciones correspondientes en la DLL original (por ejemplo COMCTL32.DLL) y finalmente crear una DLL intermedia con los datos de RC DATA, y definir las funciones XPOW _POW comunes las cuales llamaran las Funciones originales de COMCTL32.DLL. Cuando lo consigamos, habrá que crear los OCB-s.

Creo que cuando tenga la información necesaria, podemos comenzar por 1 sólo control (por ejemplo Button o Edit).

Ah si, también hay que descubrir los caracteres raros que hay en RC DATA, qué significan y dónde se usan.


La franja horaria es GMT +2. Ahora son las 14:00.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.