packVol Integrable Application fornisce un ottimizzatore di carico integrabile in software di terze parti. L'applicazione è disponibile come dll C++ non gestita per sistemi operativi Microsoft Windows oppure come applicazione a linea di comando. Lo scambio dati è implementato tramite tabelle di scambio ODBC o lettura/scrittura di file XML.
packVol Integrable Application può essere usato su Windows XP SP3 o qualsiasi sistema operativo Microsoft successivo ed è disponibile sia per architettura a 32 bit (x86) sia a 64 bit (x64). La libreria non presenta nessuna dipendenza esterna. Se si utilizza lo scambio dati tramite ODBC, è necessario creare e impostare una origine dati a un database esterno.
L'applicazione nella versione a libreria è richiamabile da qualsiasi linguaggio con supporto al caricamento dinamico di librerie esterne (ad esempio C, C++, C#, VB, Delphi). L'interfaccia espone un numero limitato di metodi per la connessione, l'esecuzione, la registrazione e lo scambio dati di seguito illustrati.
SolvClass* Expose(HWND hWnd = NULL)
crea un'istanza dell'applicazione. Parametri: l'handle [hWnd] della finestra chiamante. Attualmente il parametro non viene utilizzato. Restituisce un puntatore alla classe dell'applicazione.
void Dispose(SolvClass* pvsolv)
rilascia la memoria e le risorse utilizzate dall'applicazione. Parametri: il puntatore [pvsolv] alla classe dell'applicazione. Poiché l'applicazione non è gestita, è responsabilità del chiamante rilasciare la memoria allocata.
bool Connect(SolvClass* pvsolv, const wchar_t* dsnname, const wchar_t* dsnuser, const wchar_t* dsnpass)
stabilisce una connessione con l'origine dati ODBC. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, il nome [dsnname] dell'origine dati, il nome utente [dsnuser] e la password [dsnpass] per l'autenticazione con l'origine dati.
void Disconnect(SolvClass* pvsolv) chiude la connessione ODBC. Parametri: il puntatore [pvsolv] alla classe dell'applicazione.
int ExecuteODBC(SolvClass* pvsolv, int jobID, int* pcont)
esegue l'ottimizzazione della lista carico letta da origine dati ODBC e salva i risultati. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, l'identificativo [jobID] della lista di carico, un puntatore [pcont] ad un numero intero per il controllo dell'esecuzione.
int Execute_XML(SolvClass* pvsolv, const wchar_t* xml_filename, int* pcont)
esegue l'ottimizzazione della lista carico letta da file xml e salva i risultati. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, il file xml in ingresso [xml_filename], un puntatore [pcont] ad un numero intero per il controllo dell'esecuzione.
La variabile [pcont] nei due precedenti metodi offre un modo semplice per controllare l'esecuzione nelle applicazioni multithreaded. L'esecuzione viene protratta per tutto l'intervallo di tempo come definito in input fintanto che il valore del numero intero puntato da [pcont] non è zero. Se invece è zero, l'esecuzione viene interrotta.
// global or member variable int cont = 0; OnExecute() // start execution {// method called from or // assigned to a worker thread cont = 1; ExecuteXXXX(pvsolv, jobID, &cont); } OnStop() // stop execution { cont = 0; }
int SetWorkDir(SolvClass* pvsolv, const wchar_t* dirname)
imposta la directory di lavoro in cui l'applicazione può leggere/scrivere file. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, il percorso [dirname] della directory di lavoro.
void UseLogging(SolvClass* pvsolv, bool uselog, bool appendlog)
imposta la registrazione delle operazioni. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, un flag [uselog] per impostare o meno la registrazione, un flag [appendlog] per gestire la scrittura.
int SetLogFilename(SolvClass* pvsolv, const wchar_t* filename)
assegna un nome al file di log. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, il nome da utilizzare [filename].
int SetNamedBasename(SolvClass* pvsolv, const wchar_t* basename)
assegna il nome dei file di output. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, il nome da utilizzare [basename].
int SetAutoBasename(SolvClass* pvsolv, int flag)
assegna un nome automatico ai file di output. Parametri: il puntatore [pvsolv] alla classe dell'applicazione, un flag [flag] per definire quali campi rientrano nel nome automatico.