DLLImport con *DWORD

martedì 01 luglio 2008 - 10.25

Rotax Profilo | Newbie

Salve a tutti sto limpazzendo nel cercare di gestire una DLL standard call in un progetto vb2008 devo utilizzare questa funzione per prendere dei valori di temperatura da un apparecchio collegato al PC tramite USB:

dal file .h della DLL risulta:

DllExport BOOL _stdcall GetPCBTemperature(DWORD Card, DWORD *Temp);

dove Temp è Temp[3] DWORD

che ho tradotto in un modulo vb:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e che richiamo come:
Dim T() As UInteger = {0, 0, 0} Debug.Print(GetPCBTemperature(1, T))
ma mi restituisce sempre T=Nothing

Ho provato anche con:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e il risultato è sempre = {0, 0, 0}

Mi sono documentato un po' e adesso posso dire di aver raggiunto un buon stato confusionale !!!

Qualcuno sa' come affrontare questi problemi? (ho letto anche l'articolo "Come sfruttare le funzioni di una DLL unmanaged esterna creata in C/C++" ma devo dire che anche a me se il dato è ad esempio di tipo [byte] tutto funziona, è con i puntatori che le cose si fanno difficili! - almeno per me che ne so' poco)

Brainkiller Profilo | Guru

>Salve a tutti sto limpazzendo nel cercare di gestire una DLL
>standard call in un progetto vb2008 devo utilizzare questa funzione
>per prendere dei valori di temperatura da un apparecchio collegato
>al PC tramite USB:

Ciao,
in casi come questo, la prima risposta che do è se hai verificato se il produttore di questo Device fornisce un SDK completo, non solo di header files e di DLL ma anche magari di esempi (o in C/C++ o in altro linguaggio) e se sulle pagine del suo sito ha una knowledge base dove vengono affrontate tematiche relative allo sviluppo di programmi che fanno uso dei loro device.

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Rotax Profilo | Newbie

Ciao! Ho degli esempi in c++ .net che utilizzano questa DLL. Sembra semplice lì: importato il file heder e dichiarata la variabile come DWORD[3] tutto funziona. Nessuna particolare gestione di puntatori o altro:
DWORD TempPCB[3]; GetPCBTemperature(Card, TempPCB);
Ho chiesto se mi possono dare l'equivalente come assembly in modo da dichiare i riferimenti a livello di progetto (vado un po' a spanne perchè le mie conoscenze sono limitate...)potrebbe essere un'alternativa?

Brainkiller Profilo | Guru

>Ho chiesto se mi possono dare l'equivalente come assembly in
>modo da dichiare i riferimenti a livello di progetto (vado un
>po' a spanne perchè le mie conoscenze sono limitate...)potrebbe
>essere un'alternativa?

Sì il fatto è che con questi tipi di progetto il problema è dichiarare sempre i DllAttribute in modo corretto perchè solo così .NET sa come passare i dati ai metodi della DLL scritti in C++ e ricevere quelli di ritorno.
Se sbagli qualcosa non funziona niente. Io ho scritto l'articolo di cui parlavi prima sulle DLL in C++ e devo dire che ho sputato sangue

Magari chiedono a loro un consiglio è facile che ti rispondano.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5