| |
| /* -------------------------------------------------------------------------------- |
| * |
| * 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); |
| } |