Casse tête Power Basic -> PB et ou C -> PB
Publié : mar. 18/janv./2005 23:28
Je dois adapter un code Power Basic en PB mais je bute sur le code suivant:
------------------------------------------------------------------------
...
Declare Sub AddActionProcType(ByVal IDNum As Long, ByRef zName As Asciiz, ByRef Hint As Asciiz, ByRef Params As Asciiz) ', ByVal NumParams As Byte)
.
.
.
Sub xnbAddAction(ByVal IDNum As Long, zName As Asciiz, zHint As Asciiz, Params As Asciiz, ByVal NumParams As Byte)
' Do not edit. This is to match Delphi's calling conventions.
Asm push eax
Asm xor eax,eax
Asm mov al, NumParams
Asm push eax
Asm push eax
Call Dword nbAddAction Using AddActionProcType(IDNum, zName, zHint, Params)
Asm pop eax
End Sub
------------------------------------------------------------------------
Dans le call nbAddAction est une adresse de fonction connue
Mon code PB:
Procedure nbAddAction (IDNum.w,*Name,*HInt,*Params ,NumParams.b)
; -----------------------------Do Not Modify this function-------------------------------
PUSH eax
XOR eax,eax
MOV al,NumParams
PUSH eax
PUSH eax
CallFunctionFast(*xnbAddAction,IDNum,*Name,*HInt,*Params)
POP eax
EndProcedure
Celà ne fonctionne pas, c'est comme si le EndProcedure ne se fasait pas.
Version C qui fonctionne:
.
.
typedef void(__stdcall *AddActionProcType)(int IDNum,char* Name, char* Hint,char Params[]/*,BYTE NumParams*/);
.
.
.
void nbAddAction(int IDNum,char* Name, char* Hint,char Params[],BYTE NumParams){
/Do not edit. This is to match Delphi's calling conventions.
__asm{
push eax
xor eax,eax
mov al,NumParams
push eax
push eax
}
xnbAddAction(IDNum,Name,Hint,Params);
__asm pop eax;
}
C'est certainement une histoire de pile, mais là j'ai besoin d'un peu d'aide car je sèche depuis qques jours.
Merci
------------------------------------------------------------------------
...
Declare Sub AddActionProcType(ByVal IDNum As Long, ByRef zName As Asciiz, ByRef Hint As Asciiz, ByRef Params As Asciiz) ', ByVal NumParams As Byte)
.
.
.
Sub xnbAddAction(ByVal IDNum As Long, zName As Asciiz, zHint As Asciiz, Params As Asciiz, ByVal NumParams As Byte)
' Do not edit. This is to match Delphi's calling conventions.
Asm push eax
Asm xor eax,eax
Asm mov al, NumParams
Asm push eax
Asm push eax
Call Dword nbAddAction Using AddActionProcType(IDNum, zName, zHint, Params)
Asm pop eax
End Sub
------------------------------------------------------------------------
Dans le call nbAddAction est une adresse de fonction connue
Mon code PB:
Procedure nbAddAction (IDNum.w,*Name,*HInt,*Params ,NumParams.b)
; -----------------------------Do Not Modify this function-------------------------------
PUSH eax
XOR eax,eax
MOV al,NumParams
PUSH eax
PUSH eax
CallFunctionFast(*xnbAddAction,IDNum,*Name,*HInt,*Params)
POP eax
EndProcedure
Celà ne fonctionne pas, c'est comme si le EndProcedure ne se fasait pas.
Version C qui fonctionne:
.
.
typedef void(__stdcall *AddActionProcType)(int IDNum,char* Name, char* Hint,char Params[]/*,BYTE NumParams*/);
.
.
.
void nbAddAction(int IDNum,char* Name, char* Hint,char Params[],BYTE NumParams){
/Do not edit. This is to match Delphi's calling conventions.
__asm{
push eax
xor eax,eax
mov al,NumParams
push eax
push eax
}
xnbAddAction(IDNum,Name,Hint,Params);
__asm pop eax;
}
C'est certainement une histoire de pile, mais là j'ai besoin d'un peu d'aide car je sèche depuis qques jours.
Merci