Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
Modo sfcall vs cdecl

Al grano: tengo una función que hace uso de una dll, cuya cabecera es la siguiente (menos el modo de llamada el resto no se puede modificar):

Cita:
function FLAC__stream_encoder_init_FILE
(encoder:PFLAC__StreamEncoder; pfile:PFile; progress_callback:Pointer; client_data:Pointer):FLAC__StreamEncoderInitStatus;safecall; External libFLAC;
Previo: Como podéis imaginar, internamente se hacen una serie de inicializaciones en PFLAC__StreamEncoder, y el fichero será un wav abierto en modo lectura/escritura que en esta función se limita a (tras hacer las correspondientes validaciones de que no está vacío y tal) almacenarse en un campo de un regitro.

Mi cuestión: resulta que yo empezaba antes como modo de llamada cdecl, pero en un String del enumerado que me devuelve se me advierte de que el fichero wav no es "streamable" (que no lo puede hacer en flujo), pero mi fichero es correcto y lo he revisado muchas veces de que le llega correctamente. Mi sorpresa fue grata al descubrir que usando el modo sfcall sí que me devolvía "OK". La documentación delphi dice que

Cita:
"The safecall convention implements COM error and exception handling.
The safecall convention must be used for declaring dual-interface methods
A dual interface is an interface that supports both compile-time binding and runtime binding through Automation"
No he querido traducirlo por si malinterpreto parte del texto, pero me gustaría saber, ya que no estoy seguro, si he hecho bien o por el contrario estoy enmascarando el problema de la excepción.

Mi duda viene sobre todo porque mientras antes al pasarle como prueba un puntero a fichero que sea nulo me advertía la función (con el enumerado) de que era un error lo que estaba introduciendo, pero ahora me sale "OK" y me escama un poco todo esto.

Un saludo.
Responder Con Cita
  #2  
Antiguo 09-04-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
Un detalle que no he incluido antes, y es que las otras llamadas a funciones me van bien, y las tengo con el modo cdecl.
Responder Con Cita
  #3  
Antiguo 10-04-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
Otro detalle, internamente, esa funcion hace una comparación (en VC++) del fichero wav con stdout, ¿tendía algo que ver?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modo Cascade CoCaInE OOP 2 05-09-2006 17:06:13
Modo diseño y modo ejecución buildero_d OOP 3 11-09-2005 06:45:00
Modo extendido nesetru Gráficos 1 12-02-2004 19:01:22
Impresion en modo DOS frankmch Impresión 2 06-11-2003 16:07:50
Modo sin ODBC seduerey Impresión 3 20-07-2003 15:54:44


La franja horaria es GMT +2. Ahora son las 13:17:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi