Beh, diciamo che il messaggio è chiaramente rivolto agli amici programmatori ... C :-)
Lo scrivo qua perché non so più che pesci prendere ...
'nzomma la situazione è questa ... il capo m'ha chiesto di scrivere una sorgente twain "virtuale". che hanno fatto, si son venduti degli scanner senza stampantina build-in perché gl'hanno venduto la nostra. Ma chiaramente la nostra non è comandabile via specifiche twain, per questo devo fare una sorgente che apre un'altra sorgente e che quando qualcuno gli manda un comando diretto secondo standard alla stampantina io l'intercetto e converto il comando nel nostro formato in maniera tale che l'utente (anzi, il programmatore che userà sta cosa) crederà d'avere a che fare con un driver twain normale, invece il lavoro "sporco" lo faccio io dentro.
Bene, a parte il fatto che è già un casino fare una sorgente twain, lasciamo stare ... NON è possibile aprire una sorgente twain all'interno di un'altra. A questo punto un management saggio avrebbe stoppato tutto ... mi è stato chiesto d'andare avanti ed ormai è troppo tempo che sono su sta cosa e sento già le spine al culo.
Pertanto ... supponete che io ho una struttura del genere in C:
[CODE]typedef struct
{
TW_UINT32 DG;
TW_UINT16 DAT;
TW_UINT16 MSG;
TW_MEMREF pData;
} TWMSG
[/CODE]
i primi tre non sono altro che 3 numeri interi. L'ultimo è un puntatore che a seconda dei casi punterà a una struttura opportuna (su un totale di 3).
Ora ... devo passare questi parametri ad una funzione
[CODE]
int CallDSMEntry(TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF);
[/CODE]
Semplice no? Peccato che come vi dicevo, questa funzione, che viene bindata da una DLL non la posso invocare dalla sorgente, per cui mi sono dovuto inventare un processo esterno che si scambia dati con la sorgente registrando il contenuto di questa struttura su un file (lato sorgente).
Insomma .. st'eseguibile una volta che legge 'sto file (che è registrato in modalità binaria) lo mette dentro lo stesso tipo di struttura e passa la stessa alla famosa funzione "non chiamabile".
Ma il programmetto di merda non legge un cazzo. Esempio:
[CODE]
twInfoExp.DAT = 1;
twInfoExp.DG = 1;
twInfoExp.MSG = 1;
twInfoExp.pData = "Gennaro";
fp = fopen("C:\\tosource.bin", "wb");
fwrite(&twInfoExp, sizeof(TW_INFO_EXP), 1, fp);
fclose(fp);
[/CODE]
N.B.: twInfoExp è la struttura di sopra con un nome diverso eh
quando vado a leggere:
[CODE]
fread(&twInfoExp, sizeof(TW_INFO_EXP), 1, fp);
fclose(fp);
[/CODE]
mi ritrovo il campo pData VUOTO.
Oh, insomma ... sicuramente il post è più uno sfogo che altro ... ma se qualche anima pia (Leo, Ottimio... Prof ...) mi da 'na mano ... anche solo per parlare ... per chiarirmi le idee ... |