Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-01-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 210
Poder: 14
compuin Va por buen camino
Entry Point Not Found

Hola amigos,

Me encuentro creando una .DLL que compile en Borland C++ 7.4 y cuando trato de llamar la funcion que esta DLL tiene desde Delphi, en la compilacion me arroja el siguiente mensaje



Este es el codigo que estoy usando desde Delphi

Código Delphi [-]
function MdyToJulian( mon, day, yea : integer ): Longint; stdcall; external 'sky001.dll' name 'MdyToJulian';

Y aca la funcion en la DLL

long MdyToJulian(int mon, int day, int yea)
{
long im, j;

im = 12*((long)yea+4800)+(long)mon-3;
j = (2*(im%12) + 7 + 365*im)/12;
j += (long)day + im/48 - 32083;
if (j > 2299171) /* Take care of dates in */
j += im/4800 - im/1200 + 38; /* Gregorian calendar. */
return j;
}

GRacias de antemano

Última edición por compuin fecha: 18-01-2020 a las 18:23:22. Razón: imagen
Responder Con Cita
  #2  
Antiguo 20-01-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Hace milenios que no uso C/C++, pero ¿Estás seguro de que la DLL está exportando esa función?
Y lo evidente: La DLL está en la misma carpeta que el exe
Responder Con Cita
  #3  
Antiguo 20-01-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 210
Poder: 14
compuin Va por buen camino
Cita:
Empezado por Javierus Ver Mensaje
Hace milenios que no uso C/C++, pero ¿Estás seguro de que la DLL está exportando esa función?
Y lo evidente: La DLL está en la misma carpeta que el exe
Si, esta en la misma carpeta, lo que no estoy seguro es si esta exportando

Hay alguna forma de probar eso ?
Responder Con Cita
  #4  
Antiguo 20-01-2020
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.932
Poder: 26
delphi.com.ar Va por buen camino
¿El error es en tiempo de compilación o de ejecución?

Aparentemente tu DLL no estaría exportando por nombre la función "MdyToJulian". Igualmente si es solo ese fragmento de código el que tienes que utilizar, y suponiendo por el nombre que se trata de obtener la fecha en Juliano, te recomiendo usar la función DateTimeToJulianDate de la unit DateUtils, en conjunto con EncodeDateTime.

Código Delphi [-]
uses
  DateUtils;

function EncodeJulianDate(const AYear, AMonth, ADay: Word): Double;
begin
  result := DateTimeToJulianDate(EncodeDate(AYear, AMonth, ADay));
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 20-01-2020
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Por aquí explican que en C++ a veces los nombres exportados no son los que se espera:

https://stackoverflow.com/questions/...t-could-not-be
Responder Con Cita
  #6  
Antiguo 20-01-2020
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.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por compuin Ver Mensaje
...lo que no estoy seguro es si esta exportando...
Si subes la definición del header, te puedo decir si se está exportando o no.

Otra forma, "navegar" la librería, dado que si exporta la función por nombre, puedes verla con alguna herramienta tipo: ExportViewer ó Dependency Walker.

Saludos!
__________________
delphi.com.ar

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

Última edición por delphi.com.ar fecha: 20-01-2020 a las 23:33:53.
Responder Con Cita
  #7  
Antiguo 20-01-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 210
Poder: 14
compuin Va por buen camino
Cita:
Empezado por delphi.com.ar Ver Mensaje
Si subes la definición del header, te puedo decir si se está exportando o no.

Otra forma, "navegar" la librería, dado que si exporta la función por nombre, puedes verla con alguna herramienta tipo: ExportViewer ó Dependency Walker.

Saludos!
Te refieres al header de C++ ?
Responder Con Cita
  #8  
Antiguo 20-01-2020
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.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por compuin Ver Mensaje
Te refieres al header de C++ ?
Si... si la función tiene únicamente lo que pegaste como código, sin header, ya te confirmo que no la estás exportando.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 20-01-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 210
Poder: 14
compuin Va por buen camino
Cita:
Empezado por delphi.com.ar Ver Mensaje
Si... si la función tiene únicamente lo que pegaste como código, sin header, ya te confirmo que no la estás exportando.

Aca parte del header

/* From formulas.c */

#define EclToEqu(Z, L) CoorXform(Z, L, DTOR(TROPIC))
#define EquToEcl(Z, L) CoorXform(Z, L, DTOR(-TROPIC))
#define EquToLocal(Z, L, T) CoorXform(Z, L, T)
#define ReadPlanetData() (*datapointer++)
#define Biorhythm(D, R) (sin(((D)/(R))*PI*2.0)*100.0)
#define JulianDayFromTime(T) ((T)*36525.0+2415020.0)

extern long MdyToJulian();
extern void JulianToMdy();
extern real ProcessInput();
extern void CoorXform();
extern int HousePlaceIn();
extern void HousePlace();
extern void ComputeStars();
extern real CastChart();
Responder Con Cita
  #10  
Antiguo 21-01-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En C/C++ extern no exporta, simplemente le dice al compilador que esa función está implementada en otro sitio.


Para exportar funciones en una dll se usa __declspec(dllexport) Mira el ejemplo que dejé aquí.


Saludos.
Responder Con Cita
  #11  
Antiguo 21-01-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 210
Poder: 14
compuin Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
En C/C++ extern no exporta, simplemente le dice al compilador que esa función está implementada en otro sitio.


Para exportar funciones en una dll se usa __declspec(dllexport) Mira el ejemplo que dejé aquí.


Saludos.
El ejemplo dice Codigo PHP, sirve tambien para C++ ?

Esto deberia ir donde ? En el archivo de cabecera o en el .cpp con la funcion ?
Responder Con Cita
  #12  
Antiguo 21-01-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por compuin Ver Mensaje
El ejemplo dice Codigo PHP, sirve tambien para C++ ?

Esto deberia ir donde ? En el archivo de cabecera o en el .cpp con la funcion ?

La etiqueta del código pone PHP pero el código es C. Simplemente uso esa etiqueta porque CD no tiene etiquetas para C/C++ y la de PHP es la que deja el formato de código más parecido a C/C++ al publicar.




Saludos.
Responder Con Cita
  #13  
Antiguo 21-01-2020
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.932
Poder: 26
delphi.com.ar Va por buen camino
Acá te dejo un ejemplo hecho a medida:

Archivo funcs.cpp (todo junto, deberías pasar la definición al header)
Código:
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)

EXTERN_DLL_EXPORT long __stdcall MdyToJulian(int mon, int day, int yea)
{
	long im, j;

	im = 12*((long)yea+4800)+(long)mon-3;
	j = (2*(im%12) + 7 + 365*im)/12;
	j += (long)day + im/48 - 32083;
	if (j > 2299171) /* Take care of dates in */
	j += im/4800 - im/1200 + 38; /* Gregorian calendar. */
	return j;
}
En ese código podes observar que se exporta como una función C, con la convención stdcall.

Para compilarlo bajé el compilador gratuito Embarcadero Free C++ compiler, y lo compilé utilizando:
Código:
bcc32c funcs.cpp -tD
Y el código Delphi:
Código Delphi [-]
function MdyToJulian(mon, day, yea : integer ): Longint; stdcall; external 'funcs.dll' name 'MdyToJulian';

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := FloatToStr(MdyToJulian(1, 16, 2020));
end;

Saludos!
__________________
delphi.com.ar

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

Última edición por delphi.com.ar fecha: 21-01-2020 a las 17:14:15.
Responder Con Cita
  #14  
Antiguo 31-01-2020
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Javierus Ver Mensaje
Por aquí explican que en C++ a veces los nombres exportados no son los que se espera:
https://stackoverflow.com/questions/...t-could-not-be
Y es que algunos compiladores de C++ integran "decoración de nombres" (no estoy seguro del término). Y, en todo caso, conviene apoyarse con alguna herramienta como DLL Export Viewer para saber el nombre final de la función exportada.

Federico: ¡Tú también has regresado!
Javier. Hay algo pendiente en tu WhatsApp. :-)

Última edición por Al González fecha: 31-01-2020 a las 18:22:18.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
pasar for (Entry in FSMBiosTablesList) do a delphi7 fcios Varios 2 01-05-2013 19:50:19
Campo no Entry berfer Firebird e Interbase 12 22-08-2006 18:29:21
mysql no me permite agregar registros como duplicate entry.. Arturo MySQL 1 24-07-2006 20:15:39
Error (Duplicate Entry) romansiux Varios 4 31-05-2005 03:17:28
Invalid key links entry?? nefy Firebird e Interbase 8 12-05-2004 18:06:21


La franja horaria es GMT +2. Ahora son las 10:33:36.


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