Cita:
Empezado por hmv
-Una cosa, y como debe saber cual de estos standares usar???
|
En cada caso puede ser distinto, por eso es importante la documentación. Aunque Windows estableció como estandard: stdcall
Cita:
Empezado por hmv
-A que te refieres con parametros de derecha izq, disculpa mi ignorancia, recien estoy aprendiendo delphi.
|
Si yo tengo la función:
Código Delphi
[-]
CreateWindow(lpClassName: PChar; lpWindowName: PChar;
dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND;
hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; register;
Hará lo siguiente (esta algo simplificado para que se entienda):
Código Delphi
[-]
asm
push X { Agrega Primero el cuarto parámetro (X) a la pila}
push Y { Luego el parámetro de su derecha }
push nWidth { ... }
push nHeight
push hWndParent
push hMnu
push hInstance
push lpParam { Por último lpParam }
mov ecx, [dwStyle]
mov edx, [lpWindowName] { Y los tres primeros parámetros en registros }
mov eax, [lpClassName]
end;
en cambio, si laamamos a la función:
Código Delphi
[-]
function CreateDialogParam(hInstance: HINST; lpTemplateName: PChar;
hWndParent: HWND; lpDialogFunc: TFNDlgProc; dwInitParam: LPARAM): HWND; stdcall;
Que tiene la directiva stdcall, la ejecución será (otra vez simplificando):
Código Delphi
[-]
asm
push [dwInitParam] { Primero el primer parámetro de la derecha }
push [lpDialogFunc] { Luego el de su izquierda }
push [hWndParent] { Luego el de su izquierda }
push [lpTemplateName] { ... }
push [hInstance] { ... }
end;
Cita:
Empezado por hmv
-Y cuales son los conflictos entre los tipos de datos, Ej. y hago una DLL en VisualBasic, funcionara en delphi??
|
Simplemente los tipos de datos de la llamada tienen que coincidir con los tipos de datos esperados por las funciones.
Por ejemplo si le quieres pasar un entero a VB6, tienes que tener en cuenta que los enteros en VB6 son de 16 bits, por lo tanto el equivalente a un Smallint de Delphi.
Saludos!