Salve,
ho un problema con un'applicazione 32 bit che ho intenzione di trasformare a 64 bit.
A 32 bit funzionava tutto, ma dopo aver migliorato l'hardware volevo provarne il fnuzionamento a 64 bit.
Il probelma è tutto nel passaggio dei parametri ad una dll scritta in Assembler (anche quella portata a 64 bit)
Ecco il codice:
VB:
Private Declare Sub SUBLONG5 Lib "Codes64" (ByRef i1 As Long, ByVal cm As Long, ByRef c1 As Long, ByRef y1 As Long, ByRef p As Long, ByVal cmm As Long, ByRef c As Long)...
'All parameters are long-type
Call SUBLONG5(i1(j1m), cm, c1, y1, p(mi), cmm, c(mi))
....
Assembler:
SUBLONG5 FRAME i1,cm,c1,y1,p,cmm,cc
mov rax,[rsp+40] ; [y1]
mov rbx,[rax]
mov rdi,[rsp+16] ; [i1]
mov rsi,[rdi+rbx*8] ; mov x1,i1(y1)
mov [rax],rsi
mov rax,[rsp+32]
mov [rax],rdi
....
....
ret
SUBLONG5 ENDF
Il problema sta nel passaggio dei parametri che sono array (anche se poi vengono passati tutti long).
I valori degli array sono passati ByRef perchè dentro la procedura Assembler ho bisogno di scorrere gli elementi degli array.
C' è per caso un problema con la rappresentazione in memoria degli array del VB?
Oppure può essere un problema di come il VB mette i valori nello stack? C'è qualcuno in grado di aiutarmi?
Alessio