Ver la Versión Completa : [Compilador] Añadir más controles a PowerCOBOL v3
Kuk
10 de septiembre de 2015, 10:56
Amigos, he estudiado un poco el tema, de cómo se agregan los controles que vienen en el pack de Power 3. Básicamente, en el registro hay lo siguiente:
En la carpeta Include:
F5BBEIMG - C:\FSC\PCOBOL32\CLASS
F5BBODBC - C:\FSC\PCOBOL32\CLASS
F5BBRUN2 - C:\FSC\PCOBOL32\CLASS
PowerCOBOL - C:\FSC\PCOBOL32\CLASS
En la clave Library:
F5BBEIMG - C:\FSC\PCOBOL32\F5BBEIMG.LIB
F5BBODBC - C:\FSC\PCOBOL32\F5BBODBC.LIB
F5BBRUN2 - C:\FSC\PCOBOL32\F5BBRUN2.LIB
PowerCOBOL - C:\FSC\PCOBOL32\F5BBRUNS.LIB
En la clave Parts:
F5BBEIMG - C:\FSC\PCOBOL32\F5BBEIMG.DLL
F5BBODBC - C:\FSC\PCOBOL32\F5BBODBC.DLL
F5BBRUN2 - C:\FSC\PCOBOL32\F5BBRUN2.DLL
Y en la clave Options:
Parts - F5BBRUN2;F5BBEIMG;F5BBODBC
En definitiva, para la mayoría hay:
Un archivo *.LIB
Un archivo *.DLL
Una clase definida en OO COBOL en la carpeta CLASS
No sé cómo se conectan los controles en los IDE-s, pero todo esto me lleva a pensar que se trata de conexión bastante "clásica". He intentado añadir COMCTL32.DLL pero hay varios problemas. Primero, las antiguas DLL de Windows 98 no valen porque hacen referencias a rutinas en Kernel32.dll que ya no están disponibles en las nuevas OS. Otro problema es que no tengo un juego DLL + LIB acorde uno al otro. Y tercer problema, es que hay que escribir ficheros OCB que correspondan. He entendido cómo se escriben, pero no tengo tiempo de pegarme con ello.
Lo que me falta es saber cómo se conecta el fichero OCB con el control en sí. Y necesito que alguien me eche una mano escribiendo OCB-s (explicaré cómo va el tema más tarde).
Claramente no hay garantías de que lo consigamos, pero si sale - sinceramente sería la hostia!!! :D :bien:
Eslopes
10 de septiembre de 2015, 12:14
Olá,
coincidentemente eu estava estudando os OCBs para entender como eles funcionavam. Não consegui nenhuma documentação sobre a sintaxe usada, nem foi possível compilar um código semelhante.
Posso escrever o código OCB, mas não tenho idéia sobre como compilar ou mesmo testar.
Saludos, Emerson
PS: Um controle que poderia agregar muito valor seria o de um GroupBox com clipping, como existe no PowerCobol 4 ou superior. Dá para criar áreas de scroll, relatórios e outras cositas más ;)
Kuk
10 de septiembre de 2015, 13:20
Hola Eslopes, los OCB-s no hace falta compilarlos. Se deben guardar en la carpeta CLASS, para que el compilador los coja a la hora de compilar.
Los OCB-s de PC3 son diferentes a los de PC9 (que es el que uso normalmente). En este caso vamos a hablas del formato de los OCB para PC3.
Mira, este es el powckbtn.ocb el cual corresponde a CheckButton (o CHECKn como se asigna en un Sheet):
IDENTIFICATION DIVISION.
CLASS-ID. POWCKBTN.
ENVIRONMENT DIVISION.
CLASS SECTION.
INHERIT POWFUND EXTERNAL. *> ƒNƒ‰ƒXŒp³‚Ì‹Lq
DATA DIVISION.
CLASS SECTION.
01 POW-CHECK PIC S9(4) COMP-5.
01 POW-TEXTPOS PIC S9(4) COMP-5.
PROCEDURE DIVISION.
FUNCTION MOVE OF POW-CHECK (BY VALUE TYPE IS NUMERIC PIC S9(4) COMP-5) IS EXTERNAL
REPLACING NAME BY "XPOWCKBTNSETCHECK" .
FUNCTION REFERENCE OF POW-CHECK () IS EXTERNAL BY VALUE PIC S9(4) COMP-5
REPLACING NAME BY "XPOWCKBTNGETCHECK" .
FUNCTION MOVE OF POW-TEXTPOS (BY VALUE TYPE IS NUMERIC PIC S9(4) COMP-5) IS EXTERNAL
REPLACING NAME BY "XPOWCKBTNSETTEXTPOS" .
FUNCTION REFERENCE OF POW-TEXTPOS () IS EXTERNAL BY VALUE PIC S9(4) COMP-5
REPLACING NAME BY "XPOWCKBTNGETTEXTPOS" .
END CLASS POWCKBTN.
En este caso, tenemos herencia en una clase básica POWFUND que creo que viene en todos los OCB. Luego en CLASS SECTION tenemos las propiedades. FUNCTION MOVE equivale a SET, FUNCTION REFERENCE equivale a GET. REPLACING NAME BY contiene el nombre real de la función que está en la DLL.
Entonces, según yo he entendido, en este caso cuando hacemos:
MOVE POW-ON TO POW-CHECK OF CHECK1
Realmente por debajo se transforma en:
CALL "XPOWCKBTNSETCHECK" WITH STDCALL USING BY VALUE POW-CHECK
En la DLL del nuevo control, debe hacer funciones equivalentes.
Al menos es lo que he deducido hasta ahora. Seguramente hay otras funciones que no vemos aquí, pero por ejemplo el F5BBRUNS.DLL que es el que contiene los controles básicos, exporta algunas funciones más para todos los controles:
Lista de todas las funciones que exporta dicha DLL:
_CaGetCallUserProc@4
_CaGetUserProc@16
_CaTranslateMessage@8
_CsInitShow@4
_CwWNDStyleDlgProc@16
FXPOWGRAPHGETAXISVALUE
FXPOWGRAPHGETDATA
FXPOWGRAPHGETDATACOLOR
FXPOWGRAPHGETLOWER
FXPOWGRAPHGETNUMDATA
FXPOWGRAPHGETPIEVALUE
FXPOWGRAPHGETSTYLE
FXPOWGRAPHGETUPPER
FXPOWGRAPHSETAXISVALUE
FXPOWGRAPHSETDATA
FXPOWGRAPHSETDATACOLOR
FXPOWGRAPHSETLOWER
FXPOWGRAPHSETNUMDATA
FXPOWGRAPHSETPIEVALUE
FXPOWGRAPHSETSTYLE
FXPOWGRAPHSETUPPER
_GetPiDdeClassHandle@0
_Get_PowCkbtn_Check@4
_Get_PowCkbtn_TextPos@4
_Get_PowCombo_GotEditEvent@4
_Get_PowCombo_IMEMode@4
_Get_PowCombo_KillEditEvent@4
_Get_PowCombo_ReturnKeyEvent@4
_Get_PowCombo_Sort@4
_Get_PowCombo_Style@4
_Get_PowDate_Edge@4
_Get_PowDde_DataStyle@4
_Get_PowDde_FmtName@12
_Get_PowDde_ItmName@12
_Get_PowDde_SvcName@12
_Get_PowDde_TpcName@12
_Get_PowEdit_3D@4
_Get_PowEdit_Border@4
_Get_PowEdit_GotEditEvent@4
_Get_PowEdit_HScrollBar@4
_Get_PowEdit_HideSel@4
_Get_PowEdit_IMEMode@4
_Get_PowEdit_KillEditEvent@4
_Get_PowEdit_Limit@4
_Get_PowEdit_LimitValue@4
_Get_PowEdit_MultiLine@4
_Get_PowEdit_Password@4
_Get_PowEdit_PasswordChar@4
_Get_PowEdit_ReadOnly@4
_Get_PowEdit_ReturnKeyEvent@4
_Get_PowEdit_VScrollBar@4
_Get_PowFile_Arch@4
_Get_PowFile_Hidden@4
_Get_PowFile_Mask@12
_Get_PowFile_Normal@4
_Get_PowFile_ReadOnly@4
_Get_PowFile_System@4
_Get_PowImage_ImageName@12
_Get_PowImage_Kind@4
_Get_PowImage_Stretch@4
_Get_PowLabel_Alignment@4
_Get_PowLabel_Edge@4
_Get_PowLabel_Round@4
_Get_PowLabel_Transparent@4
_Get_PowLabel_VAlignment@4
_Get_PowList_DblClkKey@4
_Get_PowList_SelStyle@4
_Get_PowList_Sort@4
_Get_PowMeta_MetaName@12
_Get_PowPfkey_VKid@4
_Get_PowPsbtn_Default@4
_Get_PowRdbtn_Check@4
_Get_PowRdbtn_TextPos@4
_Get_PowRect_Edge@4
_Get_PowRect_Round@4
_Get_PowRect_TransParent@4
_Get_PowSound_SoundName@12
_Get_PowTimer_Activate@4
_Get_PowTimer_Interval@4
_Get_PowhScrl_LargeStep@4
_Get_PowhScrl_Pos@4
_Get_PowhScrl_Range@12
_Get_PowhScrl_SmallStep@4
_Get_PowvScrl_LargeStep@4
_Get_PowvScrl_Pos@4
_Get_PowvScrl_Range@12
_Get_PowvScrl_SmallStep@4
POWEROPENSHEET
_PiANIMEAddSel@8
_PiANIMEAddTrailPATHChar@8
_PiANIMEClearFrame@4
_PiANIMECreateDIBPalette@4
_PiANIMEGetClassHandle@0
_PiANIMEGetPalette@4
_PiANIMEGetPlay@4
_PiANIMEGetRepeat@4
_PiANIMEGetStretch@4
_PiANIMELoadDIBFile@8
_PiANIMESetPalette@8
_PiANIMESetPlay@8
_PiANIMESetRepeat@8
_PiANIMESetStretch@8
_PiDdeWndProc@16
_PiMciGetChild@4
_PiMciGetClassHandle@0
_PiMciGetDevOpen@4
_PiMciGetDevPlay@4
_PiMciGetDeviceName@8
_PiMciGetElementName@8
_PiMciGetPlayer@4
_PiMciGetSize@4
_PiMciGetWindowSizeFlag@4
_PiMciSetChild@8
_PiMciSetDevOpen@8
_PiMciSetDevPlay@8
_PiMciSetDeviceName@8
_PiMciSetElementName@8
_PiMciSetPlayer@8
_PiMciSetSize@8
_PiMciSetWindowSizeFlag@8
_PiPICChangeLPPIC@20
_PiPICCheckEditText@8
_PiPICCreatePicInfo@20
_PiPICEditPicText@28
_PiPICGetClassHandle@0
_PiPICGetEdit@4
_PiPICGetLayoutString@8
_PiPICGetMemSize@4
_PiPICGetPicAlphaNumeric@24
_PiPICGetPicNational@24
_PiPICGetPicNumeric@28
_PiPICGetPicTypeSize@4
_PiPICGetSize@4
_PiPICGetTransparent@4
_PiPICMessageBox@8
_PiPICPICSTRINGTolpPIC@20
_PiPICReEditPicText@28
_PiPICSelectCaret@8
_PiPICSendClipboardText@16
_PiPICSendDBCS@12
_PiPICSetPicAlphaNumeric@28
_PiPICSetPicNational@28
_PiPICSetPicNumeric@28
_PiPICUpdateCheckText@16
_PidatWndProc@16
_PowTableM_GetColWidth@8
_PowTableM_GetRowHeight@8
_PowTableUT_CalcVirtualSize@20
_PowTableUT_ChangeColWidth@12
_PowTableUT_ChangeRowsAndCols@12
_PowTableUT_SetCaptions@12
_PowTableUT_SetColPicString@116
_PowTableUT_SetColStyle@16
_PowTableUT_SetupScrollbars@8
_PowerChainAddItem_pc@4
_PowerChainDelItem_pc@4
_PowerChainIndentItem_pc@4
_PowerChainInsItem_pc@4
_PowerChangeItemName_pc@8
_PowerChangeItemStyle_pc@12
_PowerCloseSheetForCapture_pc@4
_PowerCloseTestSheet_pc@4
_PowerCreateMenuItem_pc@20
_PowerCreateMenu_pc@4
_PowerDeleteItem_pc@4
_PowerDestroyMenuItem_pc@8
_PowerDestroyObject@4
_PowerDuplicateItem_pc@28
_PowerEnterDebugMode@4
_PowerExitDebugMode@4
_PowerFreeEventRes@4
_PowerGetBackBrushPattern_pc@8
_PowerGetBackBrush_pc@8
_PowerGetBackMode_pc@4
_PowerGetFont_pc@8
_PowerGetForeColor_pc@8
_PowerGetItemArrayStatus_pc@8
_PowerGetItemList@4
_PowerGetItemParam_pc@8
_PowerGetItem_pc@4
_PowerGetItemhWnd_pc@4
_PowerGetMapMode_pc@8
_PowerGetMenuClassName_pc@4
_PowerGetMenuItemName_pc@8
_PowerGetNamesFromRecipe@12
_PowerGetNames_pc@12
_PowerGetPosition_pc@8
_PowerGetRecipe_pc@4
_PowerGetReplacingInfo_pc@4
_PowerGetRootItem_pc@4
_PowerGetTextColor_pc@8
_PowerGetTitleLength_pc@4
_PowerGetTitle_pc@12
_PowerGetpnItem_pc@12
_PowerIsGroupMark_pc@4
_PowerIsTabStop_pc@4
_PowerLoadEventRes@4
_PowerMakeDLLINFO@16
_PowerMakeEXEINFO@20
_PowerMenuClick_pc@8
_PowerNewApp@12
_PowerNewItem_pc@36
_PowerOpenItem_pc@16
_PowerOpenSheetForCapture_pc@8
_PowerOpenTestSheet_pc@12
_PowerSetBackBrush_pc@8
_PowerSetBackMode_pc@8
_PowerSetFont_pc@8
_PowerSetForeColor_pc@8
_PowerSetGroupMark_pc@8
_PowerSetMapMode_pc@12
_PowerSetPosition_pc@8
_PowerSetTabStop_pc@8
_PowerSetTextColor_pc@8
_PowerSetTitle_pc@8
_PowerStopEvent@8
_PowerUpdateMenuItemName_pc@12
_Set_PowCkbtn_Check@8
_Set_PowCkbtn_TextPos@8
_Set_PowCombo_GotEditEvent@8
_Set_PowCombo_IMEMode@8
_Set_PowCombo_KillEditEvent@8
_Set_PowCombo_ReturnKeyEvent@8
_Set_PowCombo_Sort@8
_Set_PowCombo_Style@8
_Set_PowDate_Edge@8
_Set_PowDde_DataStyle@8
_Set_PowDde_FmtName@8
_Set_PowDde_ItmName@8
_Set_PowDde_SvcName@8
_Set_PowDde_TpcName@8
_Set_PowEdit_3D@8
_Set_PowEdit_Border@8
_Set_PowEdit_GotEditEvent@8
_Set_PowEdit_HScrollBar@8
_Set_PowEdit_HideSel@8
_Set_PowEdit_IMEMode@8
_Set_PowEdit_KillEditEvent@8
_Set_PowEdit_Limit@8
_Set_PowEdit_LimitValue@8
_Set_PowEdit_MultiLine@8
_Set_PowEdit_Password@8
_Set_PowEdit_PasswordChar@8
_Set_PowEdit_ReadOnly@8
_Set_PowEdit_ReturnKeyEvent@8
_Set_PowEdit_VScrollBar@8
_Set_PowFile_Arch@8
_Set_PowFile_Hidden@8
_Set_PowFile_Mask@8
_Set_PowFile_Normal@8
_Set_PowFile_ReadOnly@8
_Set_PowFile_System@8
_Set_PowImage_ImageName@12
_Set_PowImage_Kind@12
_Set_PowImage_Stretch@12
_Set_PowLabel_Alignment@12
_Set_PowLabel_Edge@8
_Set_PowLabel_Round@8
_Set_PowLabel_Transparent@8
_Set_PowLabel_VAlignment@12
_Set_PowList_DblClkKey@8
_Set_PowList_SelStyle@8
_Set_PowList_Sort@8
_Set_PowMeta_MetaName@12
_Set_PowPfkey_VKid@8
_Set_PowPsbtn_Default@8
_Set_PowRdbtn_Check@8
_Set_PowRdbtn_TextPos@8
_Set_PowRect_Edge@8
_Set_PowRect_Round@8
_Set_PowRect_TransParent@8
_Set_PowSound_SoundName@8
_Set_PowTimer_Activate@8
_Set_PowTimer_Interval@8
_Set_PowhScrl_LargeStep@8
_Set_PowhScrl_Pos@8
_Set_PowhScrl_Range@12
_Set_PowhScrl_SmallStep@8
_Set_PowvScrl_LargeStep@8
_Set_PowvScrl_Pos@8
_Set_PowvScrl_Range@12
_Set_PowvScrl_SmallStep@8
XPOWCIGETPRINTENABLE
XPOWCISETPRINTENABLE
XPOWCKBTNGETCHECK
XPOWCKBTNGETTEXTPOS
XPOWCKBTNSETCHECK
XPOWCKBTNSETTEXTPOS
XPOWCOMBOADDSELECT
XPOWCOMBOADDSTRING
XPOWCOMBOADDSTRING256
XPOWCOMBODELSTRING
XPOWCOMBOFINDSTRING
XPOWCOMBOGETCOUNT
XPOWCOMBOGETSELECT
XPOWCOMBOGETSELSTRING
XPOWCOMBOGETSELSTRING256
XPOWCOMBOGETSORT
XPOWCOMBOGETSTRING
XPOWCOMBOGETSTRING256
XPOWCOMBOINSERTSTRING
XPOWCOMBOOPENFILE
XPOWCOMBORESETCONTENT
XPOWCOMBOSAVEFILE
XPOWCOMBOSETSELECT
XPOWCOMBOSETSORT
XPOWCOMBOSUBTRACTSELECT
XPOWCSALARM
XPOWCSALARMDEFAULT
XPOWCSCALLDLLSHEET
XPOWCSCALLSHEET
XPOWCSCLOSEDLLSHEET
XPOWCSCLOSEMYSELF
XPOWCSCLOSESHEET
XPOWCSENDAPPLICATION
XPOWCSEXEC
XPOWCSEXECDEFAULT
XPOWCSGETCOMMANDLINE
XPOWCSGETCURSOR
XPOWCSGETICON
XPOWCSGETSCREENSIZES
XPOWCSMESSAGEBOX
XPOWCSMSGBOXDEFAULT
XPOWCSOPENDLLSHEET
XPOWCSOPENSHEET
XPOWCSREDRAWSHEET
XPOWCSSETCURSOR
XPOWCSSETICON
XPOWCSSHOWSHEET
XPOWCWADDFONTPOINTSIZE
XPOWCWADDFONTSIZE
XPOWCWGETBACKCOLOR
XPOWCWGETENABLE
XPOWCWGETFONTPOINTSIZE
XPOWCWGETFONTSIZE
XPOWCWGETFORECOLOR
XPOWCWGETITALIC
XPOWCWGETPOSITION
XPOWCWGETSTRIKE
XPOWCWGETTABSTOP
XPOWCWGETTEXT
XPOWCWGETTEXTCOLOR
XPOWCWGETTEXTN
XPOWCWGETUNDERLINE
XPOWCWGETVISIBLE
XPOWCWGETWEIGHT
XPOWCWSETBACKCOLOR
XPOWCWSETENABLE
XPOWCWSETFOCUS
XPOWCWSETFONTPOINTSIZE
XPOWCWSETFONTSIZE
XPOWCWSETFORECOLOR
XPOWCWSETITALIC
XPOWCWSETPOSITION
XPOWCWSETSTRIKE
XPOWCWSETTABSTOP
XPOWCWSETTEXT
XPOWCWSETTEXTCOLOR
XPOWCWSETUNDERLINE
XPOWCWSETVISIBLE
XPOWCWSETWEIGHT
XPOWCWSUBTRACTFONTPOINTSIZE
XPOWCWSUBTRACTFONTSIZE
XPOWDDEADVISE
XPOWDDECHANGEITEM
XPOWDDECLOSE
XPOWDDEEXEC
XPOWDDEEXECUTE
XPOWDDEEXECUTE1024
XPOWDDEEXECUTE2048
XPOWDDEEXECUTE3072
XPOWDDEEXECUTE4096
XPOWDDEEXECUTE512
XPOWDDEEXECUTE5120
XPOWDDEGETCBACKCALLSTYLE
XPOWDDEGETDATA
XPOWDDEGETDATALEN
XPOWDDEGETDATAOFFSET
XPOWDDEGETDATASTYLE
XPOWDDEGETFMTNAME
XPOWDDEGETITMNAME
XPOWDDEGETLINKSTYLE
XPOWDDEGETSVCNAME
XPOWDDEGETTIMEOUT
XPOWDDEGETTPCNAME
XPOWDDEHOTDATA
XPOWDDEINITIATE
XPOWDDEOPEN
XPOWDDEPOKE
XPOWDDEPOKE1
XPOWDDEPOKE4
XPOWDDEPOKE8
XPOWDDEREQUEST
XPOWDDESETCBACKCALLSTYLE
XPOWDDESETDATAOFFSET
XPOWDDESETDATASTYLE
XPOWDDESETFMTNAME
XPOWDDESETITMNAME
XPOWDDESETLINKSTYLE
XPOWDDESETSVCNAME
XPOWDDESETTIMEOUT
XPOWDDESETTPCNAME
XPOWDDETERMINATE
XPOWDDEUNADVISE
XPOWDIRADDSELECT
XPOWDIRGETCOUNT
XPOWDIRGETCWD
XPOWDIRGETSELECT
XPOWDIRGETSELSTRING
XPOWDIRGETSTRING
XPOWDIRSETPATH
XPOWDIRSETSELECT
XPOWDIRSUBTRACTSELECT
XPOWDRIVEADDSELECT
XPOWDRIVEGETCOUNT
XPOWDRIVEGETCWD
XPOWDRIVEGETSELECT
XPOWDRIVEGETSELSTRING
XPOWDRIVEGETSTRING
XPOWDRIVESETPATH
XPOWDRIVESETSELECT
XPOWDRIVESUBTRACTSELECT
XPOWEDITADDFIRSTLINE
XPOWEDITADDLIMIT
XPOWEDITGETBORDER
XPOWEDITGETCARETPOS
XPOWEDITGETFIRSTLINE
XPOWEDITGETLIMIT
XPOWEDITGETLINEBREAK
XPOWEDITGETLINECOUNT
XPOWEDITGETLINETEXT
XPOWEDITGETLINETEXTN
XPOWEDITGETMODIFY
XPOWEDITGETMULTILINE
XPOWEDITGETMULTITEXT
XPOWEDITGETMULTITEXT16
XPOWEDITGETMULTITEXT8
XPOWEDITGETMULTITEXTN
XPOWEDITGETMULTITEXTN16
XPOWEDITGETMULTITEXTN8
XPOWEDITGETREADONLY
XPOWEDITGETSEL
XPOWEDITGETTEXT
XPOWEDITGETTEXTN
XPOWEDITOPENFILE
XPOWEDITSAVEFILE
XPOWEDITSCROLL
XPOWEDITSETBORDER
XPOWEDITSETCARETPOS
XPOWEDITSETFIRSTLINE
XPOWEDITSETLIMIT
XPOWEDITSETLINEBREAK
XPOWEDITSETLINETEXT
XPOWEDITSETLINETEXTN
XPOWEDITSETMODIFY
XPOWEDITSETMULTILINE
XPOWEDITSETMULTITEXT
XPOWEDITSETMULTITEXT16
XPOWEDITSETMULTITEXT8
XPOWEDITSETMULTITEXTN
XPOWEDITSETMULTITEXTN16
XPOWEDITSETMULTITEXTN8
XPOWEDITSETREADONLY
XPOWEDITSETSEL
XPOWEDITSETTEXT
XPOWEDITSETTEXTN
XPOWEDITSUBTRACTFIRSTLINE
XPOWEDITSUBTRACTLIMIT
XPOWERENDAPPLICATION
XPOWFILEADDSELECT
XPOWFILEGETARCH
XPOWFILEGETATTR
XPOWFILEGETCOUNT
XPOWFILEGETCWD
XPOWFILEGETHIDDEN
XPOWFILEGETMASK
XPOWFILEGETNORMAL
XPOWFILEGETREADONLY
XPOWFILEGETSELECT
XPOWFILEGETSELSTRING
XPOWFILEGETSTRING
XPOWFILEGETSYSTEM
XPOWFILESETARCH
XPOWFILESETATTR
XPOWFILESETHIDDEN
XPOWFILESETMASK
XPOWFILESETNORMAL
XPOWFILESETPATH
XPOWFILESETREADONLY
XPOWFILESETSELECT
XPOWFILESETSYSTEM
XPOWFILESUBTRACTSELECT
XPOWGETFILENAME
XPOWHSCRLADDLARGESTEP
XPOWHSCRLADDMAX
XPOWHSCRLADDMIN
XPOWHSCRLADDPOS
XPOWHSCRLADDSMALLSTEP
XPOWHSCRLGETLARGESTEP
XPOWHSCRLGETMAX
XPOWHSCRLGETMIN
XPOWHSCRLGETPOS
XPOWHSCRLGETSMALLSTEP
XPOWHSCRLSETLARGESTEP
XPOWHSCRLSETMAX
XPOWHSCRLSETMIN
XPOWHSCRLSETPOS
XPOWHSCRLSETSMALLSTEP
XPOWHSCRLSUBTRACTLARGESTEP
XPOWHSCRLSUBTRACTMAX
XPOWHSCRLSUBTRACTPOS
XPOWHSCRLSUBTRACTSMALLSTEP
XPOWIMAGEGETBORDER
XPOWIMAGEGETFORMAT
XPOWIMAGEGETIMAGENAME
XPOWIMAGEGETKIND
XPOWIMAGEGETPOINT
XPOWIMAGEGETSTRETCH
XPOWIMAGESETBORDER
XPOWIMAGESETFORMAT
XPOWIMAGESETIMAGENAME
XPOWIMAGESETKIND
XPOWIMAGESETPOINT
XPOWIMAGESETSTRETCH
XPOWLABELADDROUND
XPOWLABELGETALIGNMENT
XPOWLABELGETBORDER
XPOWLABELGETROUND
XPOWLABELGETTRANSPARENT
XPOWLABELSETALIGNMENT
XPOWLABELSETBORDER
XPOWLABELSETROUND
XPOWLABELSETTRANSPARENT
XPOWLABELSUBTRACTROUND
XPOWLISTADDSELECT
XPOWLISTADDSTRING
XPOWLISTADDSTRING256
XPOWLISTDELSTRING
XPOWLISTFINDSTRING
XPOWLISTGETCOUNT
XPOWLISTGETSELECT
XPOWLISTGETSELFLAG
XPOWLISTGETSELSTRING
XPOWLISTGETSELSTRING256
XPOWLISTGETSORT
XPOWLISTGETSTRING
XPOWLISTGETSTRING256
XPOWLISTINSERTSTRING
XPOWLISTOPENFILE
XPOWLISTRESETCONTENT
XPOWLISTSAVEFILE
XPOWLISTSETSELECT
XPOWLISTSETSELFLAG
XPOWLISTSETSORT
XPOWLISTSUBTRACTSELECT
XPOWMCICLOSEDEVICE
XPOWMCIGETSTATUSLENGTH
XPOWMCIGETSTATUSPOSITION
XPOWMCIGETTIMEFORMAT
XPOWMCIOPENDEVICE
XPOWMCIPAUSE
XPOWMCIPLAY
XPOWMCIRECEIVESTRING
XPOWMCIRESUME
XPOWMCISEEK
XPOWMCISENDSTRING
XPOWMCISETDEVICETYPE
XPOWMCISETELEMENT
XPOWMCISETTIMEFORMAT
XPOWMCISTOP
XPOWMENUGETCHECK
XPOWMENUGETENABLE
XPOWMENUGETMENUBREAK
XPOWMENUGETTEXT
XPOWMENUGETTEXTN
XPOWMENUGETVISIBLE
XPOWMENUSETCHECK
XPOWMENUSETENABLE
XPOWMENUSETMENUBREAK
XPOWMENUSETTEXT
XPOWMENUSETVISIBLE
XPOWMETAGETBORDER
XPOWMETAGETMETANAME
XPOWMETASETBORDER
XPOWMETASETMETANAME
XPOWPAUSEANIME
XPOWPICGETALPHANUMERIC
XPOWPICGETNATIONAL
XPOWPICGETNUMERIC
XPOWPICSETALPHANUMERIC
XPOWPICSETNATIONAL
XPOWPICSETNUMERIC
XPOWPIDATADDROUND
XPOWPIDATGETALIGNMENT
XPOWPIDATGETBORDER
XPOWPIDATGETDATE
XPOWPIDATGETROUND
XPOWPIDATGETSTYLE
XPOWPIDATGETTRANSPARENT
XPOWPIDATSETALIGNMENT
XPOWPIDATSETBORDER
XPOWPIDATSETDATE
XPOWPIDATSETROUND
XPOWPIDATSETSTYLE
XPOWPIDATSETTRANSPARENT
XPOWPIDATSUBTRACTROUND
XPOWPLAYANIME
XPOWPSBTNGETDEFAULT
XPOWPSBTNSETDEFAULT
XPOWRDBTNGETCHECK
XPOWRDBTNGETTEXTPOS
XPOWRDBTNSETCHECK
XPOWRDBTNSETTEXTPOS
XPOWRECTADDROUND
XPOWRECTGETBORDER
XPOWRECTGETROUND
XPOWRECTGETTRANSPARENT
XPOWRECTSETBORDER
XPOWRECTSETROUND
XPOWRECTSETTRANSPARENT
XPOWRECTSUBTRACTROUND
XPOWSOUNDGETSOUNDNAME
XPOWSOUNDPLAY
XPOWSOUNDSETSOUNDNAME
XPOWTABLEGETALPHANUMERIC
XPOWTABLEGETALPHANUMERICAT
XPOWTABLEGETALPHANUMERICFROM
XPOWTABLEGETCLICKCOL
XPOWTABLEGETCLICKROW
XPOWTABLEGETCOL
XPOWTABLEGETCOLCAPTION
XPOWTABLEGETCOLENABLE
XPOWTABLEGETCOLS
XPOWTABLEGETCOLTEXTPOS
XPOWTABLEGETCOLWIDTH
XPOWTABLEGETNATIONAL
XPOWTABLEGETNATIONALAT
XPOWTABLEGETNATIONALFROM
XPOWTABLEGETNUMERIC
XPOWTABLEGETNUMERICAT
XPOWTABLEGETNUMERICFROM
XPOWTABLEGETROW
XPOWTABLEGETROWCAPTION
XPOWTABLEGETROWS
XPOWTABLEGETSELECTCELLRECT
XPOWTABLESELECTCELLRECT
XPOWTABLESETALPHANUMERIC
XPOWTABLESETALPHANUMERICAT
XPOWTABLESETALPHANUMERICTO
XPOWTABLESETBACKCOLOR
XPOWTABLESETBACKCOLORRECT
XPOWTABLESETCELLBORDERRECT
XPOWTABLESETCOLCAPTION
XPOWTABLESETCOLENABLE
XPOWTABLESETCOLTEXTPOS
XPOWTABLESETCOLWIDTH
XPOWTABLESETEDITSEL
XPOWTABLESETNATIONAL
XPOWTABLESETNATIONALAT
XPOWTABLESETNATIONALTO
XPOWTABLESETNUMERIC
XPOWTABLESETNUMERICAT
XPOWTABLESETNUMERICTO
XPOWTABLESETROWCAPTION
XPOWTABLESETROWS
XPOWTABLESETSEL
XPOWTABLESETTEXTBKCOLOR
XPOWTABLESETTEXTBKCOLORRECT
XPOWTABLESETTEXTCOLOR
XPOWTABLESETTEXTCOLORRECT
XPOWTIMERADDINTERVAL
XPOWTIMERGETACTIVATE
XPOWTIMERGETINTERVAL
XPOWTIMERSETACTIVATE
XPOWTIMERSETINTERVAL
XPOWTIMERSUBTRACTINTERVAL
XPOWVSCRLADDLARGESTEP
XPOWVSCRLADDMAX
XPOWVSCRLADDMIN
XPOWVSCRLADDPOS
XPOWVSCRLADDSMALLSTEP
XPOWVSCRLGETLARGESTEP
XPOWVSCRLGETMAX
XPOWVSCRLGETMIN
XPOWVSCRLGETPOS
XPOWVSCRLGETSMALLSTEP
XPOWVSCRLSETLARGESTEP
XPOWVSCRLSETMAX
XPOWVSCRLSETMIN
XPOWVSCRLSETPOS
XPOWVSCRLSETSMALLSTEP
XPOWVSCRLSUBTRACTLARGESTEP
XPOWVSCRLSUBTRACTMAX
XPOWVSCRLSUBTRACTMIN
XPOWVSCRLSUBTRACTPOS
XPOWVSCRLSUBTRACTSMALLSTEP
_POWEROPENSHEET
fPowGraphUT_CalcGraphGeom
fPowGraphUT_ChangeNumData
fPowGraphUT_ChangeRange
fPowGraphUT_SetAxisval
ffar_atol
ffar_ltoa
_fxPowGraphGetClassHandle@0
_fxPowGraphWndProc@16
_xPowCaCheckItemName@8
_xPowCaCheckResName@8
_xPowCaEndApplication@4
_xPowCaFreeResource@12
_xPowCaGetAPPClassHandle@0
_xPowCaGetCaseSensitivity@8
_xPowCaGetCmdShow@4
_xPowCaGetCommandLine@4
_xPowCaGetDllInstance@4
_xPowCaGetMaxNameLen@8
_xPowCaGetPrimarySheet@4
_xPowCaGetPrimarySheetName@12
_xPowCaGetPrimarySheetNameLength@4
_xPowCaGetProfileStr@20
_xPowCaGetRunMode@4
_xPowCaIsSameName@16
_xPowCaLoadResource@16
_xPowCaMessageLoop@8
_xPowCaOverloadVF@12
_xPowCaPostMessageToApp@16
_xPowCaSendMessageToApp@16
_xPowCaSetProfileStr@16
_xPowCaTranslateMessage@8
_xPowCcGetCobolStrLength@8
_xPowCcMakeCStrFromCobol@12
_xPowCcMakeCobolStrFromC@16
_xPowCfGetControl@4
_xPowCfGetFUNDClassHandle@0
_xPowCfOverloadVF@12
_xPowCiGetApplication@4
_xPowCiGetCurrentSheetCursor@4
_xPowCiGetHandleInDlg@4
_xPowCiGetITEMClassHandle@0
_xPowCiGetItemID@4
_xPowCiGetItemProp@4
_xPowCiGetItemStyle@4
_xPowCiGetParent@4
_xPowCiGetPrintProp@8
_xPowCiGetPrintState@4
_xPowCiGetRunMode@4
_xPowCiGetWindow@4
_xPowCiIs3DEdge@4
_xPowCiIsGroupMark@4
_xPowCiIsTabStop@4
_xPowCiOverloadDefItemProp@8
_xPowCiOverloadDefItemStyle@8
_xPowCiOverloadVF@12
_xPowCiPrint@52
_xPowCiSetFocus@4
_xPowCiSetGroupMark@8
_xPowCiSetItemStyle@12
_xPowCiSetParent@8
_xPowCiSetPrintState@8
_xPowCiSetTabStop@8
_xPowCiSetWindow@8
_xPowCkbtnChildWndProc@16
_xPowCkbtnGetClassHandle@0
_xPowCkbtnWndProc@16
_xPowComboChildWndProc@16
_xPowComboEditWndProc@16
_xPowComboGetClassHandle@0
_xPowComboLBoxWndProc@16
_xPowComboWndProc@16
_xPowCsCloseSheet@4
_xPowCsEnumItem@12
_xPowCsExec@12
_xPowCsGetAccelHandle@4
_xPowCsGetAcrKeys@4
_xPowCsGetAcrTable@4
_xPowCsGetAcrkeyfunc@4
_xPowCsGetCursorHandle@4
_xPowCsGetCursorName@12
_xPowCsGetDefButton@4
_xPowCsGetHStep@4
_xPowCsGetHorizontalMaxItem@4
_xPowCsGetHorizontalMinItem@4
_xPowCsGetIconHandle@4
_xPowCsGetIconName@12
_xPowCsGetMenu@4
_xPowCsGetMenuKick@4
_xPowCsGetMenuPowObjasDes@4
_xPowCsGetMenuPowObjasRun@8
_xPowCsGetPF@4
_xPowCsGetRootMenuHPOWOBJ@4
_xPowCsGetSHEETClassHandle@0
_xPowCsGetScreenSize@8
_xPowCsGetVStep@4
_xPowCsGetVerticalMaxItem@4
_xPowCsGetVerticalMinItem@4
_xPowCsGethMenu@4
_xPowCsIsGrouped@8
_xPowCsIsModal@4
_xPowCsMessageBeep@8
_xPowCsPostMessageToSheet@16
_xPowCsRedrawMenu@8
_xPowCsRegisterDefButton@8
_xPowCsRegisterPF@12
_xPowCsRegisterRootMenu@20
_xPowCsSendMessageToSheet@16
_xPowCsSetAcrKeys@8
_xPowCsSetAcrkeyfunc@8
_xPowCsSetCursor@8
_xPowCsSetHStep@8
_xPowCsSetHorizontalMaxItem@8
_xPowCsSetHorizontalMinItem@8
_xPowCsSetIcon@8
_xPowCsSetMenu@8
_xPowCsSetVStep@8
_xPowCsSetVerticalMaxItem@8
_xPowCsSetVerticalMinItem@8
_xPowCsSethMenu@8
_xPowCsShowSheet@8
_xPowCwEnableWindow@8
_xPowCwGet3DStyle@4
_xPowCwGetBackBrush@8
_xPowCwGetBackBrushHandle@4
_xPowCwGetBackMode@4
_xPowCwGetBorder@4
_xPowCwGetCaption@12
_xPowCwGetCaptionLength@4
_xPowCwGetCaptionStatus@4
_xPowCwGetFont@8
_xPowCwGetFontHandle@4
_xPowCwGetForeColor@8
_xPowCwGetHelpHook@0
_xPowCwGetMapMode@8
_xPowCwGetPosition@8
_xPowCwGetPositionInPixel@8
_xPowCwGetStyle@8
_xPowCwGetTextColor@8
_xPowCwGetWNDClassHandle@0
_xPowCwIsClientRect@4
_xPowCwIsEnable@4
_xPowCwIsVisible@4
_xPowCwOverloadVF@12
_xPowCwReDraw@4
_xPowCwSet3DStyle@8
_xPowCwSetBackBrush@8
_xPowCwSetBackMode@8
_xPowCwSetBorder@8
_xPowCwSetCaption@8
_xPowCwSetCaptionStatus@8
_xPowCwSetClientRect@8
_xPowCwSetColorToDC@8
_xPowCwSetFont@8
_xPowCwSetForeColor@8
_xPowCwSetMapMode@12
_xPowCwSetPosition@8
_xPowCwSetPositionInPixel@8
_xPowCwSetStyle@12
_xPowCwSetTextColor@8
_xPowCwVisibleWindow@8
_xPowDDBToDIB@8
_xPowDIBNumColors@4
_xPowDIBToBitmap@8
_xPowDirChildWndProc@16
_xPowDirGetClassHandle@0
_xPowDirWndProc@16
_xPowDrawBtn3DGrayText@20
_xPowDrawBtn3DRect@48
_xPowDrawBtn3DRectBr@48
_xPowDrawBtn3DRectEx@32
_xPowDrawBtn3DRectPrint@56
_xPowDrawBtn3DRectPrintBr@56
_xPowDrawBtnGrayText@20
_xPowDrawBtnGrayTextProc@12
_xPowDriveChildWndProc@16
_xPowDriveGetClassHandle@0
_xPowDriveWndProc@16
_xPowEditChildWndProc@16
_xPowEditGetClassHandle@0
xPowEditMessage
_xPowEditOpenFile@8
_xPowEditSaveFile@8
_xPowEditScroll@12
_xPowEditWndProc@16
_xPowExecuteIPApplication@20
_xPowFileChildWndProc@16
_xPowFileGetClassHandle@0
_xPowFileWndProc@16
_xPowGetProcAddress@8
_xPowGroupGetClassHandle@0
_xPowGroupWndProc@16
_xPowIMEDlgGetMode@12
_xPowIMEDlgSetMode@12
_xPowIMESetConversionMode@20
_xPowImageGetClassHandle@0
_xPowLabelGetClassHandle@0
_xPowLabelMessage@8
_xPowListChildWndProc@16
_xPowListGetClassHandle@0
_xPowListOpenFile@8
_xPowListSaveFile@8
_xPowListWndProc@16
_xPowLoadDIBResource@8
_xPowMenuGetClassHandle@0
_xPowMetaGetClassHandle@0
_xPowMetaWndProc@16
_xPowOpenDIBFile@4
_xPowOpenDllSheet@12
_xPowPamPurgeAllApplication@8
_xPowPcmCheckClass@4
_xPowPcmCreateWindow@8
_xPowPcmGetClassData@8
_xPowPcmGetClassHandle@4
_xPowPcmGetClassName@12
_xPowPcmGetClassNameLength@4
_xPowPcmGetDesignServer@4
_xPowPcmGetRegisterInstance@4
_xPowPcmGetWindowClassInfo@8
_xPowPcmGetWindowClassName@12
_xPowPcmGetWindowClassNameLength@4
_xPowPcmIsDerivedClass@8
_xPowPcmRegisterPowerClass@4
_xPowPcmSetDesignServer@8
_xPowPcmUnregisterPowerClass@8
_xPowPfkeyChildWndProc@16
_xPowPfkeyGetClassHandle@0
xPowPfkeySearchVKid
_xPowPfkeyWndProc@16
_xPowPidatGetAlignment@4
_xPowPidatGetClassHandle@0
_xPowPidatGetRound@4
_xPowPidatGetStyle@4
_xPowPidatGetTransparent@4
_xPowPidatGetVAlignment@4
_xPowPidatSetAlignment@12
_xPowPidatSetRound@8
_xPowPidatSetStyle@8
_xPowPidatSetTransparent@8
_xPowPidatSetVAlignment@12
_xPowPkerAlign@8
_xPowPkerGetPowerRUNInfo@4
_xPowPkerGetPowerRUNInstance@0
_xPowPkerGetPowerRUNMode@0
_xPowPkerGetResourceDllInstance@0
_xPowPkerRegisterMonitor@4
_xPowPkerUnregisterMonitor@4
_xPowPkiGetSystemVersion@0
xPowPmbArgMsg
_xPowPmbArgMsgV@28
xPowPmbDbgMsg
_xPowPmbDbgMsgV@24
xPowPmbErrorBox
xPowPmbErrorBoxEx
xPowPmbMsgBox
_xPowPmbMsgBoxV@16
_xPowPmmAlloc@4
_xPowPmmFree@4
_xPowPmmGetGlobalHandle@4
_xPowPmmGetSize@4
_xPowPmmGlobalAlloc@4
_xPowPmmGlobalFree@4
_xPowPmmGlobalSize@4
_xPowPmmNoMemoryBox@4
_xPowPmmReAlloc@8
_xPowPomCheckObject@4
_xPowPomDestroy@8
_xPowPomGetClass@4
_xPowPomGetHPOWOBJ@4
_xPowPomGetIdentifier@12
_xPowPomGetIdentifierLength@4
_xPowPomGetInstance@4
_xPowPomGetObjectSize@4
_xPowPomGetProp@8
_xPowPomIsDerivedObject@8
_xPowPomMakeRecipe@8
_xPowPomNew@12
_xPowPomOpen@12
_xPowPomSetIdentifier@8
_xPowPrmChangeClassVersion@8
_xPowPrmWriteRecipe@12
_xPowPsbtnChildWndProc@16
_xPowPsbtnGetClassHandle@0
xPowPsbtnGetDefaultItem
xPowPsbtnSetReturnItem
_xPowPsbtnWndProc@16
_xPowRdbtnChildWndProc@16
_xPowRdbtnGetClassHandle@0
_xPowRdbtnWndProc@16
_xPowRectGetClassHandle@0
xPowRectMessage
_xPowRectWndProc@16
_xPowRunApplication@28
_xPowSoundGetClassHandle@0
_xPowSoundWndProc@16
_xPowStartApplication@16
_xPowTableGetClassHandle@0
_xPowTimerGetClassHandle@0
xPowTimerMessage
_xPowTimerWndProc@16
xPowhScrlMessage
_xPowhScrollChildWndProc@16
_xPowhScrollGetClassHandle@0
_xPowhScrollWndProc@16
xPowvScrlMessage
_xPowvScrollChildWndProc@16
_xPowvScrollGetClassHandle@0
_xPowvScrollWndProc@16
Eslopes
10 de septiembre de 2015, 16:56
Olá,
ainda não está claro para mim como o PC3 vai reconhecer um novo OCB. Existe algum arquivo que indique que ele deve buscar o OCB quando estiver compilando ? Talvez um arquivo de propriedades.
Outra dúvida, os métodos abaixo não possuem relação com as propriedades definidas no OCB. A mim parece que isto significa que estes métodos são fixos na F5BBRUN2.DLL.
_xPowCkbtnChildWndProc@16
_xPowCkbtnGetClassHandle@0
_xPowCkbtnWndProc@16
Este métodos existem para os outros controles, sem que haja uma relação com os métodos descritos no OCB.
Vou montar um OCB e colocar aqui no ForoCobol, mas acho que não será de grande valia sem primeiro entendermos se é possível realmente estender o PC3 (o que seria muito legal).
Saludos, Emerson
PS: uma outra alternativa seria reescrever o PC3 em C# para o .Net. Levaria algum tempo, mas poderíamos corrigir estas deficiências ;)
Kuk
10 de septiembre de 2015, 17:14
Eslopes, aún no sé dónde se registra la relación con los OCB, pero en algún lado la hay seguro, así que la encontraré. De momento no hace falta hacer muchos OCB-s, simplemente quería que alguien se familiarice con ello para que pueda hacerlo en el futuro.
En cuanto a las funciones "_xPowXXXXX@n" esto lo sabía. Pero no es un problema, porque podemos hacer una DLL intermediaria en C++, donde definiremos estas funciones y cargaremos la DLL del control en la DLL intermediaria.
Reescribir el compilador... Más bien el IDE... Me ha venido a la cabeza la idea, pero no sé cuanto tiempo nos va a costar hacerlo. Se podría aprovechar del compilador COBOL de Power3 y crear un nuevo IDE usando controles de MicroSoft, o BPL de Borland. El compilador de Power 9 compila TLB-s, pero no sé si tiene alguna obligación de ser TLB de ActiveX o cualquier TLB...
Total, que tu idea me parece buena, pero se necesitaría más gente, y buen conocimiento del tema, y del compilador en sí (porque crear nuevo compilador es demasiado complicado, se necesita mucho tiempo...).
Eslopes
10 de septiembre de 2015, 20:40
Olá,
não é necessário fazer o compilador do zero. Existem pelo menos dois compiladores .net disponíveis (raincode e tomcat), além de que, o código do OpenCobol está disponível e pode (com mais esforço) ser recompilado para .Net.
A IDE poderia ser baseada em Eclipse (ou Netbeans, a qual eu prefiro). O maior esforço seria desenvolver um parser e o GUI Designer que funcione como o Power (um evento é tratado com código Cobol apenas).
Acho que podemos pelo menos gastar algum tempo estudando a idéia.
Saludos, Emerson
Kuk
10 de septiembre de 2015, 20:50
Eslopes, yo nunca he usado .NET así que no sé qué decirte en este caso. Yo preferiría en teoría BPL, o bibliotecas Win32 pero no un Framework. Pero bueno, es cuestion de verlo, en caso de .NET puede haber cosas que yo no sé y debería saberlas.
En cuanto al parser, creo que se podría hacer incluso en COBOL. El GUI Desinger ya va a ser dificil en COBOL, además no tengo ni idea de cómo se realizan...
Creo que de momento mejorar el Power3 podría ser un comienzo para que en el futuro podamos hacer un IDE nuevo. ¿Qué opinas?
Eslopes
10 de septiembre de 2015, 21:24
Olá,
vou preparar alguns OCBs para o PC3 pois estou curioso para ver o que pode ser feito. Eu gostava muito do PC3 (usei em 1996 e 1997), especialmente pelo fato de que não precisava da instalação do runtime (como o power 4+) e pelo fato de que era muito rápido e adequado ao que eu precisava fazer naquela época. O problema é que o tempo passa e o PC3 ficou rapidamente defasado. O Power 4+ é praticamente outro produto. Graças ao uso de ActiveX e OO expandiu muito, mas também já ficou obsoleto. Voltar ao PC3, mas desta vez fazendo com que ele produza um código binário moderno, capaz de usar a vasta biblioteca de classes do .Net é algo que me atrai muito.
Saludos, Emerson
Kuk
10 de septiembre de 2015, 22:05
Eslopes, mi idea es que tengamos la posibilidad de hacer programas modernos precisamente portables! ActiveX necesita ser registrado con derechos de administrador, es lo que no me gusta de él. Pero no entiendo por qué dices que quedó obsoleto? Depende del tipo de aplicación que quieres desarrollar. También no sé qué ventajas aporta realmente el .NET en caso de aplicaciones business (que es lo que hacemos los coboleros).
Sincermanete, los controles de PC9 + algunos OCX de terceros yo he hecho aplicaciones muy modernas (viasualmente). No sé si es a la parte visual a lo que te refieres con obsoleto. Los IDE-s de Borland (ahora ya Embarcadero) son muy buenos, para mí son mejores que Visual Studio. Y las clases VCL son muchas y abordan todo lo que se puede necesitar. Además, todo va incluído en el *.EXE (linkeado), y no hay dependencia ninguna de Framework instalado. Creo que Objective Cobol estaba hecho con el IDE de Borland, no he conseguido descargarlo (no lo encuentro en ningun lado).
En definitiva, la idea para mi es modernizar y facilitar el GUI, manteniendo las ventajas de COBOL (ficheros RMKF indexados y etc), y que se compile en standalone executable con static run-time.
Eslopes
10 de septiembre de 2015, 23:07
Olá,
o que chamo de obsoleto:
1. Incapacidade de lidar com network (Web Services SOAP/REST, Sockets, Remote Method Invocation etc)
2. Dificuldade para lidar com XML (MSXML sofre do mal do chamado DLL Hell, diferentes versões na mesma máquina pelo Internet Explorer frequentemente entram em conflito e fazem aplicações pararem de funcionar)
3. Dificuldade de lidar como host de linguagens script (automação). Este recurso é simplesmente genial. Fiz um exemplo com PowerCOBOL e VBScript (Adding script support to PowerCobol applications
(http://www.100coolthings.net/OOCobolExamples/OtherCoolThings/VBScriptsupport/tabid/223/Default.aspx)). Muita coisa é possível, mas é complicado passar objetos do Power para a linguagem script para que esta possa manipular o mesmo. Isto dificulta a implementação de Automation (criar Macros, por exemplo) que facilitam a vida do usuário
4. Dificuldade para lidar com mensageria (MSMQ). Não raro dependemos de bibliotecas de terceiros.
5. Impossibilidade de se criar modules/portlets para portais (ex: Dotnetnuke). Isto é uma fonte de frustração para mim, particularmente. Eu pretendia usar o DNN como estrutura de portal para aplicações Cobol para Web, mas não é possível com o Fujitsu Cobol for Windows.
6. Reutilização de componentes .Net (assinatura digital, grids inteligentes, gauges, componentes que consomem web services e um longo etc)
7. Uso do .Net Framework (runtime padrão Microsoft), que vem instalado nas versões do Windows desde o Vista/Windows 7.
Muitos OCXs não funcionam com o Power por causa das estruturas de dados usadas. Isto é eliminado no .Net.
É possível criar aplicações .Net para mobile (incluindo iOS e Android). A tecnologia do Power é Microsoft COM que só funciona no Windows.
Por fim, a class library built in do .Net economiza tempo e dinheiro. Além destas ainda existem as criadas e distribuídas pelos desenvolvedores:
Ajax
Ajax Control Toolkit - Microsoft
AJAXNet Pro
ASP.NET MVC Project Awesome - a rich set of helpers (controls) that you can use to build highly responsive and interactive Ajax-enabled Web applications. These helpers include Autocomplete, AjaxDropdown, Lookup, Confirm Dialog, Popup Form and Pager. Thanks Omu (April 20, 2011)
Build Tools
Prebuild - Generate project files for all VS version, including major IDE's and tools like SharpDevelop, MonoDevelop, NAnt and Autotools
Genuilder - Precompiler which lets you transform your source code during the build. Thanks Harry McIntyre (April 13, 2011)
Charting/Graphics
Microsoft Chart Controls for ASP.NET 3.5 SP1
Microsoft Chart Controls for Winforms
ZedGraph Charting
NPlot - Charting for ASP.NET and WinForms
Graph# - a graph layout framework contains some layout algorithms and a GraphLayout control for WPF applications. Thanks Florian Standhartinger (April 20, 2011)
Collections/Generics
PowerCollections - is a library that provides generic collection classes that are not available in the .NET framework. Some of the collections included are the Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary, Set, OrderedSet, and OrderedMultiDictionary. Thanks Adam Ralph (April 20, 2011)
Compression
SharpZipLib
DotNetZip
YUI Compressor (CSS and JS minification)
AjaxMinifier (in other downloads) (CSS and JS minification. Also includes MSBuild task)
SevenZipSharp to pack, unpack a lot of different packages (including RAR, 7ZIP, etc).
ZipStorer A Pure C# Class to Store Files in Zip
Controls
Krypton - Free winform controls. Link fixed (April 14, 2011)
Source Grid - A Grid control
DevExpress - Over 60 Free Controls from DevExpress. Thanks Florian Standhartinger (April 20, 2011)
ObjectListView - is a C# wrapper around a .NET ListView. It makes the ListView much easier to use and provides some neat extra functionality. Thanks Florian Standhartinger (April 20, 2011)
Data Mapper
XmlDataMapper
AutoMapper
Dapper
Massive
Mapper Extensions Thanks giometrix (April 14, 2011)
Data accessors from the Data Access Application Block
Value Injecter - ets you define your own convention-based matching algorithms (ValueInjections) in order to match up (inject) source values to destination values. Thanks Omu (April 20, 2011)
Dependency Injection/Inversion of Control
Unity Framework - Microsoft
StructureMap - Jeremy Miller
Castle Windsor
NInject
Spring Framework
Autofac
Simple Service Locator
Managed Extensibility Framework
TinyIoC
Funq - a high performance DI framework by eliminating all runtime reflection through the use of lambdas and generic functions as factories. Thanks Marcel Popescu (April 20, 2011).
Munq - a very small, fast dependency injection container designed for ASP.NET applications, both Webforms and MVC. It has, by design, limited features. The main goal has been to minimize the CPU required for Resolving types from the container. Thanks Marcel Popescu (April 20, 2011).
Design by Contract
Microsoft Code Contracts
LinFu
CuttingEdge.Conditions
IDE
SharpDevelop - is a free IDE for C#, VB.NET and Boo projects. Thanks Florian Standhartinger (April 20, 2011).
Logging
Logging Application Block - Microsoft
Log4Net - Apache
Error Logging Modules and Handlers(ELMAH)
NLog
CuttingEdge.Logging
Logging Abstraction Api "Common.Logging"
ORM
NHibernate and FluentNHibernate
Castle ActiveRecord
Subsonic
XmlDataMapper
Truss Data binding and real time property sync library
PDF Creators/Generators
PDFsharp
iTextSharp
Automated Web Testing
Selenium
Watin
Misc Testing/Qualitysupport/Behavoir Driven Development (BDD)
Testdatagenerator NBuilder
BDD StoryQ
BDD specflow
URL Rewriting
url rewriter
UrlRewriting.Net
Url Rewriter and Reverse Proxy - Managed Fusion/Nick Berardi
MS Word/Excel Documents Manipulation
DocX to create, read, manipulate formatted word documents. Easy syntax, working nicely, actively developed. No Microsoft Office necessary.
Excel XML Writer allows creation of .XLS (Excel) files. No Microsoft Office necessary. Been a while since it has been updated. It also provides code generator to create code from already created XLS file (saved as xml). Haven't tested this but looks very promising. Too bad author is long time gone.
Excel Reader allows creation/reading of .XLS (Excel) files. No Microsoft Office necessary. Been a while since it has been updated.
Excel Package allows creation/reading of .XLSX (Excel 2007) files. No Microsoft Office necessary. Author is gone so it's out of date.
EPPlus is based on Excel Package and allows creation/reading of .XLSX (Excel 2007). It is actually the most advanced even comparing to NPOI.
NPOI is the .NET version of POI Java project at Apache POI - the Java API for Microsoft Documents (http://poi.apache.org/). POI is an open source project which can help you read/write xls, doc, ppt files.
sharp2word - a Word 2003 XML Documents Generator from C# code without any components or libraries. Thanks dublicator (April 20, 2011)
ClosedXML - an actively developed library for generating OpenXML Excel files. Thanks Joseph Robichaud (April 26, 2011)
Serialization
sharpserializer - xml/binary serializer for wpf, asp.net and silverlight
Protobuf.NET - fastest serialization port protobuf format into .NET platform. Thanks slava pocheptsov (April 26, 2011)
Silverlight
Silverlight Toolkit
Social Media
LinqToTwitter - Linq-based wrapper for all Twitter API functionality in C#
Facebook C# SDK - A toolkit for creating facebook applications / integrating websites with Facebook using the new Graph API or the old rest API.
Package managers for external libraries
NuGet (formerly known as NuPack) - Microsoft (developer-focused package management system for the .NET platform intent on simplifying the process of incorporating third party libraries into a .NET application during development)
OpenWrap - Sebastien Lambla - Open Source Dependency Manager for .net applications
Unit Testing/Mocking
NUnit
Rhino Mocks
Moq
TypeMock.Net
xUnit.net
Gallio/MbUnit
Machine.Specifications
fakeiteasy - a .Net dynamic fake framework for creating all types of fake objects, mocks, stubs etc. Thanks Omu (April 20, 2011)
NSubstitute - a A friendly substitute for .NET mocking frameworks. Thanks xerxesb (May 10, 2011)
Shouldly - How asserting should be. Thanks xerxesb (May 10, 2011)
Validation
Validation Application Block - Microsoft
xVal
Fluent Validation
Threading
Smart Thread Pool - Thread Pool management library
Retlang - a high performance C# threading library. Thanks MarcBot (April 13, 2011)
bbv.Common - an open source library of software components that makes building multi-threaded, event-based and loosely coupled systems easy. Thanks Urs Enzler (April 14, 2011)
PowerThreading - a llibrary (DLL) containing many classes to help with threading and asynchronous programming. Thanks Adam Ralph (April 20, 2011)
Unclassified
CSLA Framework - Business Objects Framework
AForge.net - AI, computer vision, genetic algorithms, machine learning
Prism - Composit UI application block for WPF, Silverlight and WP7 - Microsoft patterns & practices
Enterprise Library 5.0 - Logging, Exception Management, Caching, Cryptography, Data Access, Validation, Security, Policy Injection - Microsoft patterns & practices
File helpers library
C5 Collections - Collections for .NET
Quartz.NET - Enterprise Job Scheduler for .NET Platform
MiscUtil - Utilities by Jon Skeet
Noda Time - DateTime replacement (idomatic port of Joda Time from Java)
Lucene.net - Text indexing and searching
Json.NET - Linq over JSON
Flee - expression evaluator
PostSharp - AOP
IKVM - brings the extensive world of Java libraries to .NET.
C# Webserver - Embeddable webserver
Long Path - Microsoft
.NET Engines for the GOLD Parsing System
NCQRS - library for event-driven architectures (CQRS).
Reactive Extensions for .NET - a library for composing asynchronous and event-based programs using observable collections. Thanks steve (April 14, 2011)
Mono.GameMath - a project to develop a highly-performant math library for games, based on XNA APIs. Thanks Alex Rønne Petersen (April 14, 2011)
SLSharp - a runtime IL-to-GLSL translation engine, allowing people to write GLSL shaders as C# code. Thanks Alex Rønne Petersen (April 14, 2011)
InfusionSoftDotNet - a dll to ease the pain for .Net developers to access the InfusionSoft API. Thanks Michael Gibbs (April 20, 2011)
re-mix - provides mixins for C# and Visual Basic .NET. Thanks Stefan Papp (April 20, 2011)
Mono.Cecil - a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format. It has full support for generics, and support some debugging symbol format. Thanks Florian Standhartinger (April 20, 2011)
ImapX - is an modern .NET 2.0 library for management of IMAP folders, supports SSL Connection and different IMAP formats, such as Gmail IMAP, AOL IMAP (November 30, 2011)
Qink | Free .NET Libraries
(http://qink.net/page/The-Ultimate-List-of-Freely-Available-_NET-Libraries.aspx)
Saludos, Emerson
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
000010 IDENTIFICATION DIVISION.
000020 CLASS-ID. POWXML.
000030 ENVIRONMENT DIVISION.
000040 CLASS SECTION.
000050 INHERIT POWFUND EXTERNAL. *> ƒNƒ‰ƒXŒp³‚Ì‹Lq
000060 DATA DIVISION.
000070 CLASS SECTION.
000100 PROCEDURE DIVISION.
001010 FUNCTION LOAD (BY CONTENT TYPE IS ALPHANUMERIC PIC X(256)) IS EXTERNAL
001020 REPLACING NAME BY "XPOWIXMLDOMDOCLOADXML" .
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:
01 filename pic x(256) value "c:\book.xml".
call LOAD OF MSXML USING filename
deve resultar na compilação em :
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.
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)
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 (https://www.embarcadero.com/products/konopka-signature-vcl-controls)
VCL Components Categories Index - RAD Studio (http://docwiki.embarcadero.com/RADStudio/XE8/en/VCL_Components_Categories_Index)
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) (https://msdn.microsoft.com/en-us/library/windows/desktop/bb773169%28v=vs.85%29.aspx), 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:
000010 IDENTIFICATION DIVISION.
000020 CLASS-ID. POWIMGLIST.
000030 ENVIRONMENT DIVISION.
000040 CLASS SECTION.
000050 INHERIT POWFUND EXTERNAL. *> ƒNƒ‰ƒXŒp³‚Ì‹Lq
000060 DATA DIVISION.
000070 CLASS SECTION.
000100 PROCEDURE DIVISION.
001010 FUNCTION ADD (BY CONTENT TYPE IS ALPHANUMERIC PIC X(256)) IS EXTERNAL
001020 REPLACING NAME BY "ImageList_Add" .
...
Pero bueno, los OCB-s los necesitaremos después. De momento tengo que mirar:
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
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:
HRSRC WINAPI FindResource(
_In_opt_ HMODULE hModule,
_In_ LPCTSTR lpName,
_In_ LPCTSTR lpType
);
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
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.
Eslopes
14 de septiembre de 2015, 12:44
Um arquivo .rc contém resources que são referenciados por uma aplicação. Me parece que aqui foram usados como uma espécie de estrutura de dados para o compilador. Talvez se descobrirmos a linha de comando usada para compilar o código powercobol, possamos entender melhor o proposito do rc data.
Kuk
14 de septiembre de 2015, 14:30
Eslopes, ya he podido añadir un control a ITEMLIST. Claramente de momento no está mapeado a ninguna función por eso dice "Can't create item" :bien:
Eslopes
15 de septiembre de 2015, 01:39
Excelente! Sinceramente duvidei que fosse possivel. Qual o proximo passo?
Kuk
15 de septiembre de 2015, 09:09
Qual o proximo passo?
El próximo paso es averiguar cuales son las funciones a incluir de manera obligatoria. De momento voy a empezar buscando las funciones que crean el Control en Modo Diseño. No sé nada del tema, nunca me ha hecho falta, así que tendré que mirar bastante información...
Kuk
17 de septiembre de 2015, 14:10
Eslopes, estoy con la parte más chunga... Estoy mirando el PowerCOBOL y sus DLL-s decompiladas, para ver cómo carga los controles pero es muy dificil de seguir el código... Además, no sé y no he podido encontrar información de cómo se cargan los controles en modo Diseño (at Design time)... Me temo que esto va para largo. :(
Eslopes
18 de septiembre de 2015, 03:21
Creio que o problema é que sendo um executável tão antigo, o PowerCOBOL 3 seja monolítico, ou seja, muita coisa deve hard-coded.
Andei estudando um pouco a IDE SharpDevelop. Existe um tutorial para adicionar uma linguagem de programação à IDE e portanto gerar código a partir dos controles padrões do .Net. Utilizando um Compilador Cobol .Net como o Raincode creio ser possível fazer um PowerCOBOL.Net, mas ainda não é certo.
Saludos, Emerson
Kuk
18 de septiembre de 2015, 10:08
Eslopes, el Raincode exige el Visual Studio Professional Edition, yo lo he probado con Expres Edition y no funciona... Además, como decía antes, yo nunca he usado .NET y es un historia muy diferente a la programación Win32. Para poder ensamblar algo hay que conocerlo bien. Yo creo que yo no podría montar un IDE de .NET, no conozco nada de ello.
En cuando al PowerCOBOL, yo uso varios decompiladores, pero el que mñas es el IDA Pro. Mis conocimientos de ASSEMBLER no son muy buenos, IDA genera código C a partir de ASM pero es aproximado, y las variables y las funciones se llaman de manera aleatoria (como sub_04FA54 o v01, v30, v52 etc...). Para entender bien cómo funciona, hay que obtener información de cómo lo hacen otros IDE como Visual Studio por ejemplo.
Siempre queda la posibilidad de crear controles en dinámico vía WinAPI. Pero bueno, de momento intentaré seguir mirando y a lo mejor logramos injertar otro control al PowerCOBOL.
Eslopes
21 de septiembre de 2015, 22:13
Olá,
Raincode não é viável pois não implementa INVOKE.
Vou procurar entre meus contatos quem possa nos ajudar com a estrutura do Power.
Saludos, Emerson
Eslopes
26 de septiembre de 2015, 13:10
Olá,
após alguma investigação com o Boomerang e o Snowman (decompiladores) me parece que será muito complicado adicionar novos controles diretamente no Powercobol 3. O motivo é que o PC3 não é modular. A informação necessária para adicionar os controles a um form estão hardcoded no executável do próprio powercobol ou nas suas DLLs. Posso estar muito enganado, mas me parece praticamente impossível adicionar um novo controle sem ter acesso ao código fonte original do PC3 (o que é impossível no momento).
Desejo boa sorte (e sinceramente espero que você consiga provar que estou errado), mas paro por aqui.
Saludos, Emerson
Kuk
27 de septiembre de 2015, 21:01
Eslopes, llevas razón. Pero imposible no es! Yo tengo código fuente C++ obtenida con el IDA Pro (decompilador). El PowerCOBOL.exe no hay que modificarlo, hay que determinar bien que funciones exportan las DLL y cómo registran clases. Es muy dificil, porque el como decía, el código decompilado no tiene nombres casi para nada (variables, funciones internas). Pero seguiré echando un ojo al tema cuando vaya tendiendo tiempo.
Kuk
28 de septiembre de 2015, 09:31
Mira, estos son los fuentes resultado de la decompilación :piensa:
Kuk
5 de octubre de 2015, 21:37
Eslopes, he preguntado a la gente más sabia que yo. A ver qué tal, a lo mejor tienen respuestas a lo que necesitamos.
Kuk
1 de marzo de 2016, 11:22
Eslopes, parece que efectivamente no vale la pena... Es más fácil crear un IDE nuevo.
Sería un proyecto a largo plazo y voluntario, pero interesante. Habrá que determinar los criterios. Yo el .NET no lo conozco para nada, sin embargo conozco WinAPI. En este caso podríamos aprovechar, a lo mejor, del compilador gratuito de PowerCOBOL 3. La única pega que tiene es que no acepta CALLBACK o sea que no podemos hacer:
SET MyFuncPTR TO ENTRY "MyPgm"
Pero si de todos modos habrá que implementar un parser, creo que se podría reemplazar de alguna manera por la dirección física de MyPgm... ¿Qué opinas de todo esto?
Por cierto, he encontrado un post en internet de un tío contando sobre el tema de un GUI Desinger: c++ - Creating a professional-looking (and behaving!) form designer - Stack Overflow (http://stackoverflow.com/questions/5533131/creating-a-professional-looking-and-behaving-form-designer)
No es tan fácil como creía yo...
Kuk
14 de marzo de 2016, 11:17
Raincode não é viável pois não implementa INVOKE.
COBOL-IT permite INVOKE, y también permite llamadas STDCALL a WinAPI. Acabo de comprobarlo.
Eslopes, he encontrado esto también:
Wildcat Cobol Compiler for .NET
The Wildcat Cobol Compiler for .NET, Mono (an open source implementation of .NET) and DotGNU Portable .NET runtimes, is an open source COBOL compiler with some extensions that allow your programs to use the .NET Framework and external .NET assemblies such as NUnit. The compiler is released under the GNU GPL.
Eslopes
17 de marzo de 2016, 17:38
o Wildcat é um abandonware. O desenvolvedor não levou o projeto à frente. .
Saludos, Emerson
Eslopes
9 de noviembre de 2020, 20:59
Wildcat Cobol Compiler for .NET
Olá,
retiro o que disse, o Wildcat Cobol está vivo e chutando!! (Live and kicking!)
GitHub - sandydunlop/wildcat-cobol-compiler: Wildcat COBOL Compiler for .NET (https://github.com/sandydunlop/wildcat-cobol-compiler)
Talvez seja possível afinal criar um Powercobol for .Net ...
Kuk
11 de enero de 2022, 13:57
Olá,
retiro o que disse, o Wildcat Cobol está vivo e chutando!! (Live and kicking!)
GitHub - sandydunlop/wildcat-cobol-compiler: Wildcat COBOL Compiler for .NET (https://github.com/sandydunlop/wildcat-cobol-compiler)
Talvez seja possível afinal criar um Powercobol for .Net ...
Hola compañero.
Bueno, qué te parece si lanzamos un mensaje a los foreros para que contribuyan, e intentemos montar une IDE con constructor GUI + Cobol (sea .NET o nativo)? Es una bella iniciativa la verdad. A ver cuánta gente se apunta.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.