Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] API Dove sbaglio?

Ciao a tutti,
sto cercando di usare un API che controlla il livello di carica della
batteria del mio palmare.
La funzione è semplice di per se, ma non riesco assolutamente a farla
funzionare.
Questo è il codice che uso:
' Dichiarazione (senza il parametro Ansi, Auto ecc. in quanto non supportato
dal CompactFramework)
Declare Function iPAQGetMainBatteryLevel Lib "iPAQUtil.dll" (ByVal DWORD As
Long) As Boolean
' Codice nell'evento Click di un bottone
Dim Livello As Long
Dim OK As Boolean = iPAQGetMainBatteryLevel(Livello)
Il risultato è una bella Exception...
Vi riporto qui sotto la documentazione in mio possesso:
----------------------------------------------------------------------
iPAQGetMainBatteryLevel
BOOL iPAQGetMainBatteryLevel(DWORD * lpdwValue)
Description:  This function will get iPAQ Pocket PC main battery level in
percentage. A successful call will fill 'lpdwValue' with proper battery
charge level value.
Parameters:
      DWORD * lpdwValue[out] - the pointer to a double word variable.
Return value:
      TRUE - Success, lpdwValue will contain iPAQ Pocket PC main battery
level percentage
      Valid range of lpdwValue is from 0 to 100.
      FALSE - Fail, lpdwValue will be set to -1 (unknown)
How to use:
      Don't have to include header file
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR
lpCmdLine,
int nCmdShow)
{
DWORD dwResult;
HINSTANCE hDll;
// function type declaration -- type of parameters MUST be SAME as that of
being called function
typedef BOOL (CALLBACK *LPFNiPAQGetMainBatteryLevel) (DWORD *);
//function declarations.
LPFNiPAQGetMainBatteryLevel iPAQGetMainBatteryLevel;
// load library
hDll = LoadLibrary(TEXT("iPAQUtil.dll"));
// actual function mapping
iPAQGetMainBatteryLevel= (LPFNiPAQGetMainBatteryLevel)GetProcAddress(hDll,
TEXT("iPAQGetMainBatteryLevel"));
// actual function call
iPAQGetMainBatteryLevel(&dwResult);
return 0;
}
 ---------------------------------------------------------------------------
----

  DWORD * lpdwValue[out] - the pointer to a double word variable.
Il double word č un intero a 32 bit?
Se č cosě, in .net corrisponde all'integer, non al long.
Salutoni
Sergio

 ha scritto nel messaggio
news:bcutlp$nf85v$1...@ID-173193.news.dfncis.de...
: [Luca di Cerneglons] scrisse:
:
: >  DWORD * lpdwValue[out] - the pointer to a double word variable.
:
: Il double word č un intero a 32 bit?
: Se č cosě, in .net corrisponde all'integer, non al long.
Sinceramente non so, ho provato ad usare sia un Long che un Integer32 ma la
sostanza non cambia...errori su errori
: Salutoni
: Sergio
:
Ciao, Luca.

 ma la sostanza non cambia...errori su errori
potresti precisare l'eccezione che ti viene sollevata?
Salutoni
Sergio

 ha scritto nel messaggio
news:bcuukp$nkl6c$1...@ID-173193.news.dfncis.de...
: [Luca di Cerneglons] scrisse:
: > Sinceramente non so, ho provato ad usare sia un Long che un Integer32
: > ma la sostanza non cambia...errori su errori
:
: potresti precisare l'eccezione che ti viene sollevata?
Dunque...se uso un Long si pianta con una System.NotSupportedException.
Se uso un Integer ( o Int32) si pianta proprio il palmare e mi da una bella
schermata bianca con scritto "Eccezione Nativa" e una serie di indirizzi
esadecimali.
Non so, non capisco!!!
Ciao, Luca.

"Luca di Cerneglons"
cerneglons di ūdin?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:ab090b7623c7bc0adda...@mygate.mailgate.org...
: "Luca di Cerneglons"
:
: cerneglons di ūdin?
:
:
: --
: Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Si, propit di Udin !!!
Par cjas o ai cjatat un antri furlan ??!!!
Ciao, Luca.

Prova con questa declare
Declare Function iPAQGetMainBatteryLevel Lib "iPAQUtil.dll" (ByRef lpDwWalue
As
System.UInt32) As Boolean
Dim Livello As System.Uint32
Dim OK As Boolean = iPAQGetMainBatteryLevel(Livello)
Se hai problemi con Uint32 usa Long
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
"Luca di Cerneglons" <pr...@scriver.mi> ha scritto nel messaggio
news:QMCIa.107608$lK4.3...@twister1.libero.it...


 ha scritto nel
messaggio news:FEEIa.117862$pR3.2...@news1.tin.it...
: Prova con questa declare
:
:
: Declare Function iPAQGetMainBatteryLevel Lib "iPAQUtil.dll" (ByRef
lpDwWalue
: As
: System.UInt32) As Boolean
Un mago...non ho parole!!!
Ho notato che UInt32 più che un DataType è una Struttura, dovrò documentarmi
"bene" su queste cose, anche perchè questa è solo una delle tante API che
dovrò utilizzare e ogni volta dovrò stare attento ai parametri da passare,
non si finisce mai di imparare!!!
Grazie ancora!
Ciao, Luca.

Tutti i valuetypes del framework sono strutture, lo dimostra il fatto che
hanno dei metodi tipo ToString() che in un basetype come comunemente inteso
non avrebbero senso.
