Ver Mensaje Individual
  #5  
Antiguo 30-10-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.935
Reputación: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita