Esempio SPPSERV/Sviluppo scadenze/cpp

Da SIGLAkb.
Versione del 10 apr 2020 alle 18:48 di WikiSysop (Discussione | contributi) (una versione importata)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Dp-ingranaggio3.png Questo esempio illustra come utilizzare le funzioni della SPPSERV.DLL per calcolare le scadenze a partire da un codice di pagamento. L'esempio è stato sviluppato in C++ e compilato con Visual Studio 2008.

Prima di utilizzare questo esempio è necessario modificare opportunamente alcuni dati come le stringhe di connessione ai database dei dati comuni e ditta, il codice pagamento, le date ecc..

Dp-acceptn72x72.png Questo sorgente è fornito a titolo di esempio come dimostrazione dell'utilizzo della libreria SPPSERV.DLL. Nessuna garanzia, né implicita né esplicita, è prevista per qualsiasi utilizzo diverso da quello indicato.
 
 
 /* --------------------------------------------------------------------------------
  *
  * Programma di esempio per il calcolo delle scadenze utilizzando le funzioni della
  * libreria SPPSERV.DLL.
  * Prima di utilizzare questo esempio è necessario modificare alcune informazioni
  * in modo da adattare il codice alla base dati utilizzata.
  *
  * QUESTO SORGENTE E' FORNITO A TITOLO DI ESEMPIO COME DIMOSTRAZIONE DELL'UTILIZZO
  * DELLA LIBRERIA SPPSERV.DLL. NESSUNA GARANZIA, NE' IMPLICITA NE' ESPLICITA, E'
  * PREVISTA PER QUALSIASI UTILIZZO DIVERSO DA QUELLO INDICATO.
  *
  -------------------------------------------------------------------------------- */
 #include "stdafx.h"
 #include <iostream>
 #include <windows.h>
 #include <stdio.h>
 
 using namespace std;
 
 #define MY_LIBRARY_NAME "sppserv.dll"
 
 #define SPPSRV_SUCCESS 0
 
 #define DLLCALL __stdcall
 
 // prototipi delle funzioni della sppserv.dll
 int (DLLCALL *SPPSRVVersion)(void);
 int (DLLCALL *SPPSRVInit)(HWND mainwnd);
 int (DLLCALL *SPPSRVExit)(void);
 int (DLLCALL *SPPSRVComuniConnect)(LPSTR comuniconnectstring);
 int (DLLCALL *SPPSRVDittaConnect)(LPSTR dittaconnectstring);
 int (DLLCALL *SPPSRVSetEsercizio)(LPSTR esercizio);
 int (DLLCALL *SPPSRVSetEuro)(UCHAR IsEuro);
 int (DLLCALL *SPPSRVSetUtente)(LPSTR utente);
 int (DLLCALL *SPPSRVSetTodayDate)(LPSTR todaydate);
 int (DLLCALL *SPPSRVCalcolaScadenze)(LPSTR tipopag,UCHAR IsValuta,double TRata,
  LPSTR DataFattura,LPSTR datadecpag,LPSTR ggpart,
  LPSTR msalto1,LPSTR msalto2,LPSTR ggsalto);
 int (DLLCALL *SPPSRVReadScadenza)(int nscad,double *importo,LPSTR data,LPSTR tipo);
 
 // funzioni ausiliarie
 void ReportError(const char *Msg);
 
 
 void main(int argc, char *argv[])
 {
  HINSTANCE dll;
  FARPROC pp;
  UCHAR IsError;
  int rc, numscad;
  HWND hMainWnd;
 
  rc = 0;
  dll = NULL;
 
  hMainWnd = GetDesktopWindow();
 
  cout << endl;
  cout << "Inizio test " << MY_LIBRARY_NAME << endl;
  cout << "---------------------------------------------------" << endl;
  cout << endl;
 
  //--------------------------------------------------------------//
 
  cout << "Caricamento DLL e estrazione funzioni..." << endl;
  cout << endl;
 
  // caricamento della dll
  dll=LoadLibrary(MY_LIBRARY_NAME);
  if(dll!=NULL) {
  cout << " " << MY_LIBRARY_NAME << " caricata con successo" << endl;
  }
  else {
  cout << "**********************************************" << endl;
  cout << "ERRORE: LoadLibrary(\"" << MY_LIBRARY_NAME << "\") fallita!" << endl;
  ReportError("Dettagli");
  cout << "**********************************************" << endl;
  goto END_OF_TEST;
  }
 
  cout << endl;
 
  // estrazione delle funzioni esportate dalla dll
  IsError = 0;
  //int DLLCALL SPPSRVInit(HWND mainwnd);
  pp=GetProcAddress(dll,"SPPSRVInit");
  if(pp!=NULL) {
  SPPSRVInit=(int (DLLCALL *)(HWND)) pp;
  cout << " " << "SPPSRVInit" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVInit" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVVersion(void);
  pp=GetProcAddress(dll,"SPPSRVVersion");
  if(pp!=NULL) {
  SPPSRVVersion=(int (DLLCALL *)(void)) pp;
  cout << " " << "SPPSRVVersion" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVVersion" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVExit(void);
  pp=GetProcAddress(dll,"SPPSRVExit");
  if(pp!=NULL) {
  SPPSRVExit=(int (DLLCALL *)(void)) pp;
  cout << " " << "SPPSRVExit" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVExit" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVComuniConnect(LPSTR comuniconnectstring);
  pp=GetProcAddress(dll,"SPPSRVComuniConnect");
  if(pp!=NULL) {
  SPPSRVComuniConnect=(int (DLLCALL *)(LPSTR)) pp;
  cout << " " << "SPPSRVComuniConnect" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVComuniConnect" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVDittaConnect(LPSTR dittaconnectstring);
  pp=GetProcAddress(dll,"SPPSRVDittaConnect");
  if(pp!=NULL) {
  SPPSRVDittaConnect=(int (DLLCALL *)(LPSTR)) pp;
  cout << " " << "SPPSRVDittaConnect" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVDittaConnect" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVSetEsercizio(LPSTR esercizio);
  pp=GetProcAddress(dll,"SPPSRVSetEsercizio");
  if(pp!=NULL) {
  SPPSRVSetEsercizio=(int (DLLCALL *)(LPSTR)) pp;
  cout << " " << "SPPSRVSetEsercizio" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetEsercizio" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVSetUtente(LPSTR utente);
  pp=GetProcAddress(dll,"SPPSRVSetUtente");
  if(pp!=NULL) {
  SPPSRVSetUtente=(int (DLLCALL *)(LPSTR)) pp;
  cout << " " << "SPPSRVSetUtente" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetUtente" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVSetTodayDate(LPSTR todaydate);
  pp=GetProcAddress(dll,"SPPSRVSetTodayDate");
  if(pp!=NULL) {
  SPPSRVSetTodayDate=(int (DLLCALL *)(LPSTR)) pp;
  cout << " " << "SPPSRVSetTodayDate" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetTodayDate" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVSetEuro(UCHAR IsEuro);
  pp=GetProcAddress(dll,"SPPSRVSetEuro");
  if(pp!=NULL) {
  SPPSRVSetEuro=(int (DLLCALL *)(UCHAR)) pp;
  cout << " " << "SPPSRVSetEuro" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVSetEuro" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
 
  //int DLLCALL SPPSRVCalcolaScadenze(LPSTR tipopag,BOOL IsValuta,double TRata,
  // LPSTR DataFattura,LPSTR datadecpag,LPSTR ggpart,
  // LPSTR msalto1,LPSTR msalto2,LPSTR ggsalto);
  pp=GetProcAddress(dll,"SPPSRVCalcolaScadenze");
  if(pp!=NULL) {
  SPPSRVCalcolaScadenze=(int (DLLCALL *)(LPSTR , UCHAR, double, LPSTR, LPSTR,
  LPSTR, LPSTR, LPSTR, LPSTR)) pp;
  cout << " " << "SPPSRVCalcolaScadenze" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVCalcolaScadenze" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
  //int DLLCALL SPPSRVReadScadenza(int nscad,double *importo,LPSTR data,LPSTR tipo);
  pp=GetProcAddress(dll,"SPPSRVReadScadenza");
  if(pp!=NULL) {
  SPPSRVReadScadenza=(int (DLLCALL *)(int, double *, LPSTR, LPSTR)) pp;
  cout << " " << "SPPSRVReadScadenza" << " caricata con successo" << endl;
  }
  else {
  cout << "**************************************************************" << endl;
  cout << "ERRORE: GetProcAddress(dll,\"" << "SPPSRVReadScadenza" << "\") fallita!" << endl;
  cout << "**************************************************************" << endl;
  IsError = 1;
  }
 
  if(IsError) goto END_OF_TEST;
 
  //--------------------------------------------------------------//
 
  cout << endl;
  cout << "Test sviluppo delle scadenze..." << endl;
  cout << endl;
 
  /*
  * §: ESEMPIO di sviluppo delle scadenze
  */
 
  // inizializzazione della DLL
  rc = SPPSRVInit(hMainWnd);
  cout << " " << "SPPSRVInit" << " ha tornato: " << rc << endl;
  if( rc!=SPPSRV_SUCCESS ) goto END_OF_TEST;
  // numero di versione della dll
  rc = SPPSRVVersion();
  cout << " " << "SPPSRVVersion" << " ha tornato: " << rc << endl;
  // connessione al database dei dati comuni e dei dati ditta
  #ifdef STARTSUITE
  // versione per SIGLA StartSuite (archivi dui tipo DBF)
  rc = SPPSRVComuniConnect("C:\\SIGLAPP\\PROVGEN");
  cout << " " << "SPPSRVComuniConnect" << " ha tornato: " << rc << endl;
  if( rc!=SPPSRV_SUCCESS ) goto FINE;
  rc = SPPSRVDittaConnect("C:\\SIGLAPP\\PROVDIT");
  cout << " " << "SPPSRVDittaConnect" << " ha tornato: " << rc << endl;
  if( rc!=SPPSRV_SUCCESS ) goto FINE;
  #else
  // versione per SIGLA (accesso ai dati via ODBC)
  rc = SPPSRVComuniConnect("DSN=SPPGEN;UID=sigla;PWD=sigla;");
  cout << " " << "SPPSRVComuniConnect" << " ha tornato: " << rc << endl;
  if( rc!=SPPSRV_SUCCESS ) goto FINE;
  rc = SPPSRVDittaConnect("DSN=SPPDIT;UID=sigla;PWD=sigla;");
  cout << " " << "SPPSRVDittaConnect" << " ha tornato: " << rc << endl;
  if( rc!=SPPSRV_SUCCESS ) goto FINE;
  #endif
  // impostazione dell'esercizio di lavoro
  rc = SPPSRVSetEsercizio("2012");
  cout << " " << "SPPSRVSetEsercizio" << " ha tornato: " << rc << endl;
  // impostazione dell'utente
  rc = SPPSRVSetUtente("SIGLA ");
  cout << " " << "SPPSRVSetUtente" << " ha tornato: " << rc << endl;
  // impostazione della data
  rc = SPPSRVSetTodayDate("20121113");
  cout << " " << "SPPSRVSetTodayDate" << " ha tornato: " << rc << endl;
  // impostazione dell'euro come valuta di lavoro
  rc = SPPSRVSetEuro(1);
  cout << " " << "SPPSrvSetEuro" << " ha tornato: " << rc << endl;
 
  // calcolo delle scadenze
  cout << "Calcolo della scadenza..." << endl;
 
  // int DLLCALL SPPSRVCalcolaScadenze(LPSTR tipopag,BOOL IsValuta,double TRata,
  // LPSTR DataFattura,LPSTR datadecpag,LPSTR ggpart,
  // LPSTR msalto1,LPSTR msalto2,LPSTR ggsalto);
  // parametri
  // LPSTR DataFattura="20121113"
  // LPSTR datadecpag="20121130"
  // LPSTR ggpart="\0"
  // LPSTR msalto1="\0"
  // LPSTR msalto2="\0"
  // LPSTR ggsalto="\0"
  // double TRata=1000.0
  // UCHAR IsValuta=0
  // LPSTR tipopag=""
  //
  rc = SPPSRVCalcolaScadenze("RB02",0,1000.0,"20121113","20121130","\0","\0","\0","\0");
  cout << " " << "SPPSRVCalcolaScadenze" << " ha tornato: " << rc << endl;
 
  // lettura delle scadenze
  numscad = rc;
  double importo;
  char data[16], buffer[16], tipo[8];
  if( numscad>0 )
  {
  // int DLLCALL SPPSRVReadScadenza(int nscad,double *importo,LPSTR data,LPSTR tipo);
  for( int j=1; j<=numscad; j++)
  {
  rc = SPPSRVReadScadenza(j, &importo, data, tipo);
  //cout << " " << "SPPSRVReadScadenza" << " ha tornato: " << rc << endl;
  if(rc==0)
  {
  sprintf(buffer, "%2.2s/%2.2s/%4.4s", data+6, data+4, data);
  cout << j << ") Data: " << buffer << " Importo: " << importo << endl;
  }
  else
  cout << j << ") " << "SPPSRVReadScadenza" << " ha tornato: " << rc << endl;
  }
  }
 
 FINE:
  // resetta la DLL
  rc = SPPSRVExit();
  cout << " " << "SPPSRVExit" << " ha tornato: " << rc << endl;
 
  cout << endl;
  cout << "... <INVIO> per terminare..." << endl;
  char ch;
  cin.get(ch);
  cin.clear();
 
 END_OF_TEST:
 
  if(dll!=NULL) FreeLibrary(dll);
 
  cout << endl;
  cout << "---------------------------------------------------" << endl;
  cout << "fine test " << MY_LIBRARY_NAME << endl;
  cout << endl;
 }
 
 void ReportError(const char *Msg)
 {
  LPVOID lpMsgBuf;
  DWORD ErrorCode = GetLastError ();
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
  FORMAT_MESSAGE_MAX_WIDTH_MASK | FORMAT_MESSAGE_ALLOCATE_BUFFER,
  NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  (LPTSTR) &lpMsgBuf, 0, NULL);
  printf("%s: errore %ld (%s)\n", Msg, ErrorCode, lpMsgBuf);
  LocalFree(lpMsgBuf);
 }
 

Bibliografia

Voci correlate

Come si personalizza SIGLA
SPPSERV.DLL
La libreria SIGPPDLL
La libreria SPPFrame