Oppure

Loading
13/09/10 14:16
Neo1986
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 :


float[] temp = new float[3];

fixed (float* pfT = temp)
   for (ushort m = 0, j = 1; j < (1 << 3); j <<= 1)
                {
                    if (0 != (j & u16TempSupport))
                    {
                        if (!SusiHWMGetTemperature(j, pfT + m, null))
                        {
                            MessageBox.Show("SusiHWMGetTemperature failed! " + "ErrorCode = " + SusiDllGetLastError().ToString());
                            return;
                        }
                    }

                    m++;
                }

            textBoxHWMTcpu.Text = temp[0].ToString();
            textBoxHWMTsys.Text = temp[1].ToString();
            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 :

Dim pfV As Single* = volt
Dim l As UInteger = 0, i As UInteger = 1
While i < (1 << 10)
	If 0 <> (i And u32VoltSupport) Then
		If Not SusiHWMGetVoltage(i, pfV + l, Nothing) Then
			MessageBox.Show("SusiHWMGetVoltage failed! " + "ErrorCode = " + SusiDllGetLastError().ToString())
			Return
		End If
	End If

	l += 1
	i <<= 1
End While


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

Secondo voi dove sbaglio? :-|
Ultima modifica effettuata da Neo1986 13/09/10 14:18
aaa
13/09/10 15:05
HeDo

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

usa questo: converter.telerik.com/…
aaa
13/09/10 15:24
Neo1986
Ciao hedo, ho utilizzato proprio quello!

infatti manca quella riga che associa il puntatore a temp
aaa
13/09/10 18:49
manvb.net
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 13/09/10 18:52
aaa
14/09/10 9:09
Il Totem
In VB non ci sono puntatori tipizzati. Quindi dimentica il fixed (using in vb) e sostituisci pfT+x con temp(x).
aaa