- du pac-SDK de Brother,
- Technologie COM
- Harbour (compilateur Clipper Open-Source)
Il utilise lui même un compilateur C pour générer un exécutable Win32.
Pour notre part, nous utilisons MSVC (Visual C++ 8.0) puisque nous intégrons aussi Mediator (pour remplacer DBF par une DB PostGreSql).
Le projet Harbour dispose de nombreuses contributions, entre autre une concernant l'impression en mode RAW (super pour piloter une imprimante HP depuis du code Clipper) mais aussi une autre contribution relative aux appels OLE (comprenez, aussi "COM").
L'exemple TestOle.prg d'Harbour
Le projet Harbour contient la contribution:
c:\hb30\contrib\hbwin\tests\testole.prg
qui démontre l'usage de COM depuis un projet écrit CLIPPER et compilé avec Harbour.
Croyez le ou pas MAIS CA MARCHE DU TONNERRE!!!
Ouvrir une feuille Excel, Ouvrir un document Word ou OpenOffice, démarrer InternetExplorer et naviger vers la page du projet Harbour. De petits exemple mais franchement bluffant pour une technologique qui date quand même de 20 ans!
Le plus dur est encore d'arriver à compiler le PRG en exécutable.
Je vous propose le petit fichier Batch suivant qui effectue toutes les étapes nécessaires.
Ses particularités sont:
- D'utiliser MSVC comme compilateur (il ***faut absolument*** lancer le batch depuis une "Invite de Commande Visual Studio 2008")
- De linker les bonnes librairies OLE (cherchez après OleAut32.lib & Ole32.lib)
- Link les librairies Mediator (MedNtx). Vous n'en aurez probablement pas besoin, vous pouvez donc enlever les références à
%MEDDIR%\harbour\lib\%HBBUILD%\vc80\medntx.lib
%MEDDIR%\harbour\lib\%HBBUILD%\vc80\cmnnet32.lib
rem RUN IT BY using the Visual Studio C++ compiler COMMAND LINE (via start menu) rem http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express REM set HBDIR to the directory where HARBOUR is installed SET HBDIR=c:\hb30 REM set MEDDIR to the directory where Mediator is installed SET MEDDIR=c:\medcl REM set HBBUILD to the name of the xHarbour build (for ex. build80) SET HBBUILD=build3000 %HBDIR%\bin\harbour -m testole.prg /i%HBDIR%\include/i%MEDDIR%\xharbour\include /dHBCL if errorlevel 1 goto error_end cl -c /w /TP /GA /Gs /Zl /nologo /I%HBDIR%\include /dHBCL testole.c if errorlevel 1 goto error_end link /OUT:TestOle.exe /subsystem:CONSOLE testole.OBJ %HBDIR%\lib\win\msvc\hbwin.lib %HBDIR%\lib\win\msvc\hbdebug.lib %HBDIR%\lib\win\msvc\hbvm.lib %HBDIR%\lib\win\msvc\hbrtl.lib %HBDIR%\lib\win\msvc\rddntx.lib %HBDIR%\lib\win\msvc\hblang.lib %HBDIR%\lib\win\msvc\hbrdd.lib %HBDIR%\lib\win\msvc\hbmacro.lib %HBDIR%\lib\win\msvc\hbpp.lib %HBDIR%\lib\win\msvc\hbcommon.lib %HBDIR%\lib\win\msvc\gtwin.lib %HBDIR%\lib\win\msvc\hbsix.lib %HBDIR%\lib\win\msvc\rddfpt.lib winspool.lib wsock32.lib kernel32.lib user32.lib advapi32.lib OleAut32.lib Ole32.lib %MEDDIR%\harbour\lib\%HBBUILD%\vc80\medntx.lib %MEDDIR%\harbour\lib\%HBBUILD%\vc80\cmnnet32.lib if errorlevel 1 goto error_end goto end :error_end echo !!!!!!!!!!!!!! ERROR IN ZZD-testole.BAT !!!!!!!!!!!!!!!!!!!! :end
Une fois compilé, il est facile de s'apercevoir que les appels OLE fonctionnent assez bien.
J'ai personnellement fait mes test sous Win 7 64 bits (programme compilé en 32 bits)
Impression d'étiquettes sur une QL-570
L'article "QL-570: utilitaires pour imprimer facilement des étiquettes" présentait un bout de code vbs permettant d'imprimer une étiquette via l'interface COM du b-pac SDK de Brother.
Fort de mes premiers résultats, j'ai ajouté une fonction CLIPPER dans le programme TestOle.PRG me permettant de faire les appels COM depuis Clipper.
Cette fonction Exm_PrintPac mime le fonctionnement du VBS en utilisant les capacités COM de harbour.
STATIC PROCEDURE Exm_PrintPac() IF ( oObjDoc := win_oleCreateObject( "bpac.Document" ) ) != NIL ? oObjDoc:Open( "C:\Program Files (x86)\Brother bPAC3 SDK\Templates\NamePlate1.lbx" ) oComp := oObjDoc:GetObject("objCompany") oComp:Text := "Brother Industries, Ltd." oComp2 := oObjDoc:GetObject("objName") oComp2:Text := "myself, Dodo" && ObjDoc.SetMediaByName ObjDoc.Printer.GetMediaName(), True oPrinter := oObjDoc:Printer mediaName = oPrinter:GetMediaName() ? mediaName oObjDoc:SetMediaByName( mediaName, .T. ) oObjDoc:StartPrint( "Brother QL-570", 0 ) && Nom du document dans le spooler oObjDoc:PrintOut( 1, 0 ) && 1= nbre de copies oObjDoc:EndPrint() oObjDoc:Close() ELSE ? "Error: bpac.document not available. [" + win_oleErrorText()+ "]" ENDIF RETURN
Et comme attendu... une fois appelée, cette fonction sort la bonne étiquette.
Merci OTC!
Notre société migre un logiciel vieux de 20 ans vers PostGreSql (grâce à la technologie RDD), Harbour et Mediator.
Mediator est un produit OTC qui nous fournit la technologie RDD dont nous avons besoin et nous permet d'utiliser une base de données relationnel PostGreSql (à la place des fichiers DBFs).
Médiator est un produit très aboutit et performant!
Notre logiciel est d'ores et déjà en test sur Win 7 64 bits dans un environnement multi-utilisateurs.
Pour la première fois de ma vie de développeur j'ai rencontré un service support à classer dans la catégorie "exceptionnel".
OTC fournit un support de qualité, compétant et endurant! (notre cas ne fût certainement pas l'un des plus simples).
A chaque embûche j'y ai trouvé de l'aide, que cela soit un problème de migration ou de compilation.
Si je remercie OTC aujourd'hui c'est parce que la compilation de OleTest.PRG regroupe une grande partie des connaissance que OTC m'a prodigué ces derniers mois (quand je parle d'endurance, ce n'est pas pour rien).
Mes remerciements vont plus particulièrement à Miss Bozena Potempa du service Support.
Aucun commentaire:
Enregistrer un commentaire