Ok, succede una cosa davvero strana!![]()
questa è la mia funzione in C
è una funzione molto semplice quindi trovo strano si comporti in maniera così strana.codice:int _stdcall Param_Load(bearing *curr_bearing, double F2L_X_TH, double F2L_Y_TH, double F2L_Z_TH, double C_THRESHOLD, double OR_THRESHOLD,double IR_THRESHOLD,double B_THRESHOLD, double DB, double DP, double NB, double TETA) { curr_bearing->F2L_X_TH = F2L_X_TH; curr_bearing->F2L_Y_TH = F2L_Y_TH; curr_bearing->F2L_Z_TH = F2L_Z_TH; curr_bearing->C_THRESHOLD = C_THRESHOLD; curr_bearing->OR_THRESHOLD = OR_THRESHOLD; curr_bearing->IR_THRESHOLD = IR_THRESHOLD; curr_bearing->B_THRESHOLD = B_THRESHOLD; curr_bearing->DB = DB; curr_bearing->DP = DP; curr_bearing->NB = NB; // Passare il parametro in GRADI!!!!!!!!!!! curr_bearing->TETA = TETA * 3.141592654 /180; return 0; }
In VB la importo così:
La chiamo così:codice:Public Declare Function Param_Load Lib "C:\Documents and Settings\Ale\Desktop\GUI\SKF_Multi.dll" (ByRef curr_bearing As Bearing, ByVal F2L_X_TH As Double, ByVal F2L_Y_TH As Double, ByVal F2L_Z_TH As Double, ByVal C_THRESHOLD As Double, ByVal OR_THRESHOLD As Double, ByVal IR_THRESHOLD As Double, ByVal B_THRESHOLD As Double, ByVal DB As Double, ByVal DP As Double, ByVal NB As Double, ByVal TETA As Double) As Long
i valori dei vari parametri sono:codice:Call Gvar.Param_Load(tmpbear, F2L_X_TH, F2L_Y_TH, F2L_Z_TH, C_THRESHOLD, OR_THRESHOLD, IR_THRESHOLD, B_THRESHOLD, DB, DP, NB, TETA)
F2L_X_TH = 25
F2L_Y_TH = 35
F2L_Z_TH = 30
C_THRESHOLD = 6
OR_THRESHOLD = 16
IR_THRESHOLD = 12
B_THRESHOLD = 8
DB = 9.525
DP = 90
NB = 25
TETA = 15
Quando devo chiamarla leggo da file i valori dei vari parametri, ho controllato ed effettivamente vengono letti in maniera corretta.
Dopo l'esecuzione della funzione ottengo questo:
F2L_X_TH = 30
F2L_Y_TH = 6
F2L_Z_TH = 16
C_THRESHOLD = 12
OR_THRESHOLD = 8
IR_THRESHOLD = 9.525
B_THRESHOLD = 90
DB = 25
DP = 0.2167 (la conversione di TETA in radianti)
NB = 0 rimane a 0 perchè all'inizio inizializzo tutto a 0)
TETA = 0 (sempre per l'inizializzazione)
I valori Scritti son quelli corretti ( a parte che scompaiono il valore di F2L_Y_TH e uno dei due parametri che valgono 25 cioè F2L_X_TH o NB), ma sembra che la dll non capisca in quali campi debba andare a scrivere i valori. Così a naso mi semmbra possa essere un problema analogo al precedente...
Quando cercavo su internet come tradurre la mia struttura C in VB sul sito della microsoft (http://support.microsoft.com/kb/106553/it) avevo letto che i corrispettivi in VB degli int del C sono gli integer, io ho usato i Long perchè su un altro sito (http://www.visual-basic.it/articoli/agVB_VC.htm) dice di usare i Long.
Per sfizio ho provato a trasformare tutti i Long in Integer pensando che magari se i campi della struttura hanno lunghezza diverse il C non riesce a riconoscere correttamente nemmeno gli altri (ovvero i double della mia funzione)... il risultato è stato che con gli Integer Param_Load non fa assolutamente nulla (i parametri rimangono tutti a 0).... FAIL!
Per inciso la F2_SetGolden ora funziona da Dio in entrambi i casi...per la serie "almeno di qualcosa possiamo gioire"![]()
![]()
![]()

Rispondi quotando