Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Conversione da C# a VB
Forum - C# / VB.NET - [VB.NET] Conversione da C# a VB

Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 88
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 16:16
Lunedì, 13/09/2010
Buongiorno a tutti,

dovrei utilizzare una funzione contenuta in una dll non .net.

Il produttore ha allegato insieme a questa dll un esempio sviluppato in c# che è il seguente :

Codice sorgente - presumibilmente C#

  1. float[] temp = new float[3];
  2.  
  3. fixed (float* pfT = temp)
  4.    for (ushort m = 0, j = 1; j < (1 << 3); j <<= 1)
  5.                 {
  6.                     if (0 != (j & u16TempSupport))
  7.                     {
  8.                         if (!SusiHWMGetTemperature(j, pfT + m, null))
  9.                         {
  10.                             MessageBox.Show("SusiHWMGetTemperature failed! " + "ErrorCode = " + SusiDllGetLastError().ToString());
  11.                             return;
  12.                         }
  13.                     }
  14.  
  15.                     m++;
  16.                 }
  17.  
  18.             textBoxHWMTcpu.Text = temp[0].ToString();
  19.             textBoxHWMTsys.Text = temp[1].ToString();
  20.             textBoxHWMTaux.Text = temp[2].ToString();



Come avrete capito, la temperatura restituita dalla dll con il codice di esempio è corretta, con il codice sotto ovviamente non è corretta perchè è sempre 0 (penso manchi la riga fixed float* pfT = temp)

Questo è il codice che ho tradotto in vb.net :

Codice sorgente - presumibilmente VB.NET

  1. Dim pfV As Single* = volt
  2. Dim l As UInteger = 0, i As UInteger = 1
  3. While i < (1 << 10)
  4.         If 0 <> (i And u32VoltSupport) Then
  5.                 If Not SusiHWMGetVoltage(i, pfV + l, Nothing) Then
  6.                         MessageBox.Show("SusiHWMGetVoltage failed! " + "ErrorCode = " + SusiDllGetLastError().ToString())
  7.                         Return
  8.                 End If
  9.         End If
  10.  
  11.         l += 1
  12.         i <<= 1
  13. End While



ovvimanete stampando tutti gli elementi di temp mi vengono restituiti solo degli 0

Secondo voi dove sbaglio? :-|

Ultima modifica effettuata da Neo1986 il 13/09/2010 alle 16:18


Chiedere è lecito, rispondere è cortesia, rompere il caxxx è prassi!
PM
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 20:49
Lunedì, 13/09/2010
Puoi farti un wrapper a .net utilizzando C#..
Ti crei una dll in C# che chiami la dll unmanaged e poi con vb.net puoi richiamare la dll C#.

Oppure puoi usare un IntPtr con l'aiuto della classe Marshal..

se cerchi su google dovresti trovare qualcosa.

Ultima modifica effettuata da manvb.net il 13/09/2010 alle 20:52


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 11:09
Martedì, 14/09/2010
In VB non ci sono puntatori tipizzati. Quindi dimentica il fixed (using in vb) e sostituisci pfT+x con temp(x).


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 17:05
Lunedì, 13/09/2010

sbagli ad usare vb, la sintassi di C# è un concentrato di stile...

usa questo: http://converter.telerik.com/Default.aspx


Ingegnere Informatico
https://ldlagency.it
PM
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 88
Iscritto: 21/06/2010

Up
-1
Down
V
Segnala al moderatore
Postato alle 17:24
Lunedì, 13/09/2010
Ciao hedo, ho utilizzato proprio quello!

infatti manca quella riga che associa il puntatore a temp


Chiedere è lecito, rispondere è cortesia, rompere il caxxx è prassi!
PM