Ç°ÍùShuct.NetÊ×Ò³

Shudepb PB·´±àÒëר¼Ò³¤Ê±¼äÒÔÀ´,ΪҵÄÚͬÀàÈí¼þÊÂʵÉϵÄΨһѡÔñ.ϸ½Ú,ÕÃÏÔרҵ.̬¶È,¾ö¶¨Æ·ÖÊ.

¹ØÓÚPowerBuilderµÄËÑË÷

PowerBuilder PowerBuilder Voici quelques trucs et codes pour PowerBuilder. Toute remarque, suggestion, question bienvenue. N'h&eacute;sitez pas &agrave; me laisser un mail. Vous pouvez consulter la liste de mes liens PB (sur Del.icio.us) Vous appr&eacute;ciez mon travail ? Montrez-le : Extensions PBNI PBNI = PowerBuilder Native Interface, c'est un SDK fourni par Sybase qui permet d'&eacute;crire des extensions pour PB en C++ (avec Microsoft Visual Studio) PbniRegex + PbRegexCoach Pour tenter de pallier aux probl&egrave;mes de performances de unvo_regexp j'ai fait une extension pbni pouvant utiliser des expressions r&eacute;guli&egrave;res compatibles perl (r&eacute;utilise le moteur PCRE). Cette extension ajoute aussi une fonction globale de replaceall. Cette extention est faite &agrave; partir du SDK fourni avec PB et des exemples que j'ai pu trouver sur Codexchange. Fonctionnalit&eacute;s principales de l'objet uo_regex : syntaxe des regex perl (notamment les groupes capturants - PCRE = Perl Compatible Regular Expression) fonction de remplacement sur les matches de la regex qui peut r&eacute;utiliser les groupes match&eacute;s (syntaxe : \1 \2 \n) fournit une fonction globale FastReplaceAll() utilisable sans devoir instancier uo_regex; m&ecirc;me si cette fonction est impl&eacute;ment&eacute;e en C++, elle est beaucoup plus rapide qu'un &eacute;quivalent en pbscript Pour tester cette extension j'ai aussi cr&eacute;&eacute; PbRegexCoach (inspir&eacute; de The Regex Coach) : Cette application r&eacute;utilise aussi plusieurs composants de Nicolas Georges : redimensionneur automatique, splitters horizontal et vertical d&eacute;riv&eacute;s de ceux de Roland Smith. Nicolas a aussi publi&eacute; un exemple d'utilisation de pbniregex. Extension pbniregex.zip (sources incluses) + PbRegexCoach - Derni&egrave;re mise &agrave; jour : lundi 4 juillet 2011. ChangeLog 2001-07-04 - Added the PB12 version 2011-06-28 - PB9 backport complete. Support for escaped backslashes in Replace(), now you can use strings like '\\1' for inserting '\1' into replaced text. Added the possibility to get the whole match with '\0'. 2011-06-21 - Started the PB9 backport, exported the source code separately into folder for each PB version 9,10,11.5 2011-06-18 - the pbx/pbd files zere backported to PB10.5 and PB10.0 (actually 10.2) the pbx, pbd and sample files (pbregexcoach.exe, pbl's) are named like the PB development files : pbniregex115, pbregexcoach105, worksp100.pbw... 2011-02-14 - Upgrade of the splitters (various bugfixes and enhancements) Export of the components source code (into pb_src folder) to help backporting 2009-09-09 - Project upgraded to PB 11.5 2009-06-26 - Added the GetLastError() method to get... err... the last error :) 2009-04-27 - PBX recompiled with PB 10.5.2.7826 2009-04-01 - I noticed that the utf-8 mode was buggy : when strings contained some extended chars, both length & positions functions returned wrong values and the returned strings were not correctly translated back into PB internal utf-16. Reworked the internal string handling to always work in utf-8, setutf8() does nothing and isutf8() always returns true. The initialize() method does not fail anymore if the pattern is null (it used to return a PBX_E_INVOKE_WRONG_NUM_ARGS status in that case) I reworked the UI layout a bit with Nicolas Georges. The close menu problem is solved. The license conditions were updated to adopt the formal MIT license. 2009-03-16 - Minor refactor of the GUI + added a mini-help TODO : there is a little GUI problem : the close button and system menu have disappeared you have to quit with the File / Quit menu item 2009-03-11 - Bugfix in Replace() : broken by last modification to get the capturing groups count, was replacing only the first occurence Bugfix 2 : trying to replace an empty string by an empty string got endless loop :S Nicolas Georges refactored the UI to use a splitter and added a live-update of the results. There is also a unit-test functionnality now. 2009-02-25 - Bugfix in Replace() : use the number of capturing groups from the pattern instead of the number of the matched groups for the expansion of the \nn items. E.g: Replace() returned \1 instead of an empty string when a pattern with a capturing group matched nothing. 2009-02-09 - fixaround with search() when a match has null length I noticed that the HeapAlloc calls *should* be surrounded by try/catch ;) 2008-11-26 - added the getpattern() method 2008-11-14 - fixed the correct handling of the option multiline added the options and methods to handle dot-match-newlines, ungreedy and extended syntax minor layout changes in regex coach 2008-11-13 - bugfix : crashing during replace() when a group matches nothing is bad :o) 2008-11-11 - rewrote the vector allocation for matches & groups with dynamic allocation added the study() method 2008-11-05 - first public release 2008-09-08 - creation of PbRegexCoach as a test tool for PbniRegex 2008-09-01 - start of the project PbniHash La table de hachage (ou hashtable, dictionnaire, tableau associatif) est une structure de donn&eacute;es tr&egrave;s utile mais malheureusement absente de PowerBuilder. La lib opensource libhashish impl&eacute;mente plusieurs algorithmes de hachage sous GNU/Linux. J'ai port&eacute; cette lib sous Windows gr&acirc;ce &agrave; MinGW (Nicolas Georges a ensuite d&eacute;sactiv&eacute; la fonction de tri en arbre pour pouvoir r&eacute;utiliser libhashish sous licence BSD) et j'ai &eacute;crit une extension pbni permettant d'utiliser des hashtables directement en Powerscript. La libhashish a plein de possibilit&eacute;s mais le wrapper pbni est limit&eacute; &agrave; l'essentiel : les cl&eacute;s sont des cha&icirc;nes les valeurs sont de type any, donc tout type d'objet peut &ecirc;tre stock&eacute; dans la table ajout ou suppression d'un &eacute;l&eacute;ment par sa cl&eacute; remplacement d'un &eacute;l&eacute;ment d&eacute;j&agrave; pr&eacute;sent on peut obtenir le nombre d'&eacute;l&eacute;ments stock&eacute;s on peut r&eacute;cup&eacute;rer la liste des cl&eacute;s dans un tableau, ce qui peut permettre un parcours de l'ensemble des valeurs - mais l'ordre n'est pas garanti : il d&eacute;pend de l'algorithme de hachage on peut purger la table Extension pbnihash.zip (sources incluses) + sample PB de test - Derni&egrave;re mise &agrave; jour : dimanche 3 juillet 2011. ChangeLog 2011-07-03 - Added a script to help the packaging and distrbution 2009-07-11 - first public release 2009-07-02 - bug fixed GetKeys() - the returned array is from correct type so no more crash while copying the array 2009-06-05 - Nicolas Georges has recompiled libhashish without tree hashing algorithm to let us use the BSD license 2008-09-01 - start of the project PbniList La liste cha&icirc;n&eacute;e est une autre structure absente de PowerBuilder. Je me suis appuy&eacute; sur les STL pour impl&eacute;menter un objet de liste (uo_list) et un vecteur (uo_vector). Mes listes et vecteurs ont quelques caract&eacute;ristiques int&eacute;ressantes : on peut ajouter au d&eacute;but, &agrave; la fin ou &agrave; la position de son choix la liste et le vecteur ont un it&eacute;rateur int&eacute;gr&eacute; permettant un parcours dans les 2 sens les 2 structures sont triables (il faut indiquer à la m&eacute;thode sort() un objet impl&eacute;mentant une fonction int list_compare(any, any) permettant de comparer 2 &eacute;l&eacute;ments de la liste ou du vecteur Extension pbnilist.zip (sources incluses) + sample PB de test - Derni&egrave;re mise &agrave; jour : lundi 4 juillet 2011. ChangeLog 2011-07-04 - Added the PB12 version 2011-07-03 - added a script to help the packaging and distribution 2011-06-28 - Backported the extension and the demo application to PB9,10,10.5 2011-02-04 - patch SetCorrectPBValue method to allow Object, Enum, Array and null values (geni) 2010-11-10 - added the comparison function name to sort() method arguments : now we can use any comparison function, as long as its signature is "int func(any a, any b)" the returned value is like for the classical strcmp() : -1 if a<b, 0 if a=b, 1 if a>b 2010-05-01 - First public release 2010-02-16 - implemented the sort() methods for both list and vector 2010-02-12 - added the vector implementation + benchmarks 2010-02-02 - start of the project PbniCW - Cool Wrappers Voici plusieurs wrappers qui ne pouvaient pas &ecirc;tre int&eacute;gr&eacute;s aux extensions pr&eacute;c&eacute;dentes. Liste des fonctionnalit&eacute;s : acc&egrave;s en lecture aux ressources VersionInfo des .exe et .dll GetVersionInfoString(), GetVersionInfoFullString(), GetVersionInfoFixed() CWGetField() / CWSetField pour acc&eacute;der &agrave; n'importe quelle propri&eacute;t&eacute; d'un objet ou contr&ocirc;le graphique RetrieveVarArgs() permet de faire un retrieve sur une Datawindow ou Datastore en passant les arguments dans un tableau de any (pratique pour &eacute;crire du code dynamique avec une DW dont on change le dataobject) Fonctions logiques pour unsigned longs BitwiseOr(), BitwiseXor(), BitwiseAnd(), BitwiseNot(), BitwiseLeftShift(), BitwiseRightShift() Converstions ulong -> string ToHexString() et ToOctalString() Sp&eacute;cial ASA : objet uo_transaction permettant de recevoir des notifications de la base, par exemple pendant l'ec&eacute;cution d'une proc&eacute;dure stock&eacute;e. Si vous voulez recompiler cette extension vous devez &ecirc;tre en possession du SDK ASA. Bugs connus CWGetField sur une propri&eacute;t&eacute; qui n'existe pas fait planter PB GetVersionInfoxxx() sur l'application depuis elle-m&ecirc;me fait planter PB Extension pbnicw.zip (sources incluses) + sample PB de test - Derni&egrave;re mise &agrave; jour : lundi 17 mai 2010. ChangeLog 2010-05-17 - First public release 2009-09-25 - Bitwise manipulation functions, ToHEx(), ToOct() added a #define for USE_ASA_ODBC Bugfix RetrieveVaArgs when no arg in array + test from pbnicw.pbl 2009-09-24 - Message notification handler for asaodbc by Nicolas 2009-08-29 - Upgraded to PB 11.5.0.3127, RetrieveVaArgs by Nicolas Georges 2009-04-27 - Upgraded to PB 10.5.2.7826 2008-12-17 - Access to simplified version infos 2008-09-18 - start of the project, access to FixedVersionInfo Autres composants - userobjects unvo_regexp unvo_regexp est un userobject natif qui remappe l'objet OLE vbscript.regex (auteur : Nicolas Georges). La syntaxe accept&eacute;e par l'objet est rappel&eacute;e dans la liste des variables d'instance (c'est la syntaxe de l'objet vbscript.regex). Si vous utilisez cet objet ponctuellement, c'est tr&egrave;s pratique. Toutefois les performances ne sont pas fantastiques d&egrave;s que vous instanciez l'objet dans des boucles du fait de la connexion &agrave; l'objet OLE dans le constructeur. splitters u_scilexer Roland Smith a publi&eacute; sur Topwiz Software un contr&ocirc;le PB permettant de wrapper l'&eacute;diteur Scintilla. Avec l'aide de Nicolas Georges, j'ai ajout&eacute; des fonctionnalit&eacute;s permettant d'utiliser les ic&ocirc;nes, la compl&eacute;tion de code et d'autres choses. Voici mon impl&eacute;mentation : u_scilexer.sru (vous avez &eacute;galement besoin de la dll de scintilla, renomm&eacute;e "scilexer.dll"). n_zlib n_zlib.sru : encore un composant de Roland Smith destin&eacute; &agrave; wrapper la zlib pour PB. J'ai ajout&eacute; le support des flux gzipp&eacute;s &agrave; l'impl&eacute;mentation de Roland Smith. nv_mailslot nv_mailslot.sru est un objet permettant d'utiliser les mailslots (le mailslot est l'une des possibilit&eacute; de communication inter-processus sous Windows). Pour tester la mise en oeuvre, j'ai cod&eacute; un exemple en PB et un second en java : MailSlotPB.zip. nv_codec_base64 nv_codec_base64.sru est une impl&eacute;mentation en pbscript d'un codec base64 (pour un probl&egrave;me de performance il y a une d&eacute;pendance avec pbnicw pour les calculs binaires). Cependant l'encodage est relativement lent sur de grosses donn&eacute;es, n'essayez pas de traiter des m&eacute;ga-octets... Outils compl&eacute;mentaires FILL ME: script perl check pbg FILL ME: script perl dw pbdumper pbdumper est un outil exp&eacute;rimental permettant d'enregistrer la totalit&eacute; du contenu d'une biblioth&egrave;que PB (pbl / pbd) ou d'un exe ou dll compil&eacute;s par PB. Cet outil a &eacute;t&eacute; utilis&eacute; avec succ&egrave;s sur des fichiers produits par PB 5 &agrave; 11.5 et devrait fonctionner &eacute;galement avec PB12 si le format des pbl n'a pas chang&eacute;. Je me suis servi de cet outil pour r&eacute;cup&eacute;rer des ressources dans des applications &eacute;crites &agrave; mon travail et dont nous avions perdu les sources. Il est programm&eacute; en C99 et compil&eacute; avec MinGW. Cet outil n'aurait pas pu exister sans les pr&eacute;cieuses informations contenues dans le format de fichier PBL publi&eacute; par Arnd Schmidt. Il a aussi fait quelques outils pour &eacute;tudier les libs PB. Todo : documenter l'usage pbdumper.zip - Derni&egrave;re mise &agrave; jour : mardi 13 mars 2012 ChangeLog 2012-03-13 - (0.9.9) - bugfix newline export in source files headers - bugfix library name display in list mode - do not try to process directories (problem seen when processing *.pbl and there is some lib.pbl-dump folders) - refactor of the source code export - added the --scc info to show the source control attributes of library entries 2012-02-21 - (0.9.8) - added the support for library entries with a path in the name 2012-01-12 - (0.9.7) - added the --debug to filter debug output + reworked the listing mode 2012-01-10 - (0.9.6) - added the --name for wildcard matching on objects names 2012-01-09 - (0.9.5) - fixed a stupid bug in the NOD* tree parsing - added the --source-only option - added the --list option 2011-11-05 - (0.9.4) - rewrote the command line parsing with getopt - added a simulation parameter (--dry-run) 2011-10-26 - (0.9.3) - bugfixed the dump of ENT* blocks - code rewritten in C99 instead of C++ - filter the output with a verbose switch - can create a folder to dump the objects in 2009-10-26 - (0.9.2) improved the export of the pbscript source files 2008-10-22 - (0.9) initial release 2009-10-18 - proper export of the source files with header and comments 2008-10-24 - Initial prototype Liens Nicolas Georges : l'auteur de la Datawindow Debug Machine, des auto-resizers et du projet Embedding Perl (pour scripter vos applis PB en perl) Roland Smith : propose de nombreux modules d'int&eacute;gration d'outils tiers comme Scintilla, ou de composants comme les splitters... PowerToTheBuilder : propose quelques composants (payants) pour donner un coup de neuf &agrave; vos applications PB : fen&ecirc;tres dockables, tab controls, auto filter pour datawindow... PBadonf un portail et des forums en Fran&ccedil;ais sur PB phpMyVisites | Open source web analytics S&eacute;bastien Kirche Retour &agrave; la page principale Derni&egrave;re mise &agrave; jour : jeudi 14 février 2013.