Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Lightbulb DLL: No se encuentra punto de entrada del procedimiento...

Que tal foreros.

Un proveedor me esta entregando una dll hecha en Visual Basic 6, y me indica las funciones...

Código:
Public Function Marca(telefono As String, prefijo As String) As Integer
Esta DLL lo que hara, será marcar a un número telefónico entre otras cosas, por eso el prefijo.

asi que yo en Delphi pongo lo siguiente.

Código Delphi [-]
implementation
{$R *.dfm}
function Marca(telefono, prefijo : string) : integer ; External 'C:\Archivos de programa\BAPCXSETDLL\BAPCXSETDLL.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Marca(Edit1.Text, 'm')));
end;

Pero me marca el siguiente error.

No se encuentra el punto de entrada del procedimiento Marca en la biblioteca de vínculos dinámicos 'C:\Archivos de programa\BAPCXSETDLL\BAPCXSETDLL.dll'

Segun yo todo esta bien, no se si tenga que definirse algo al compilar la dll en VB6 para que cualquier lenguaje pueda usarlo.

Cuando es al reves, o sea que una dll se genere en Delphi creo que hay que ponerle stdCall para que pueda ser interpretado por todos los lenguajes.

Aunque lo mas seguro es que yo este mal en algo, espero me puedan ayudar, gracias.


Vicente López.
Responder Con Cita
  #2  
Antiguo 25-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que te falta el atributo (por decirlo de algún modo) "name" a continuación de "external", de tal modo que con él indiques el procedimiento a que quieres acceder en la DLL que tratas de enlazar. Fíjate en la siguiente declaración:

Código Delphi [-]
function IsThemeActive : BOOL; external 'uxtheme.dll' name 'IsThemeActive';

¿Lo coges? Pues prueba a ver y nos cuentas qué pasó.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Gracias DEC, en este mismo instante lo pruebo.
Responder Con Cita
  #4  
Antiguo 25-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Posiblemente te estén dando gato por liebre

Si en la declaración external no se especifica name, entonces se asume que el nombre dado en la declaración coincide con el de la dll, y si el proveedor te dice que ese es el nombre y marca ese error, pues eso, te da gato por liebre.

Sin embargo, creo recordar de mi oscuro pasado, que las dll en VB no son estándar, así que, si tal es el caso, posiblemente sólo puedas usarla en VB.

// Saludos
Responder Con Cita
  #5  
Antiguo 25-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, y nada más para aclarar lo que comenta David; la directiva name es necesaria sólo cuando deseamos usar un nombre distinto al que tiene la dll, por ejemplo:

Código Delphi [-]
function ElTemaEstaActivo : BOOL; external 'uxtheme.dll' name 'IsThemeActive';

Aquí, estamos importando una función que originalmente se llama IsThemeActive pero que en nuestro código identificaremos como ElTemaEstaActivo.

// Saludos
Responder Con Cita
  #6  
Antiguo 25-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Si en la declaración external no se especifica name, entonces se asume que el nombre dado en la declaración coincide con el de la dll (...)
Sí; llevas razón Román, el caso es que lo sabía, en serio, pero no lo recordaba, que tal vez sea como si no lo supiera de veras y acabara de aprenderlo. Gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Unhappy nop

Nop, no funciono, me marca el siguiente error:

Código:
Project D:\project1.exe faulted with message: 'access violation at 0x77f879a1: write of address 0x00030f00'. Proces stoped. Use step o Run to continue'

Uso Delphi 6.




Saludos.
Responder Con Cita
  #8  
Antiguo 25-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chente(rMan)
Cuando es al reves, o sea que una dll se genere en Delphi creo que hay que ponerle stdCall para que pueda ser interpretado por todos los lenguajes.
No me había fijado en esto. En la declaración para importar la función, normalmente tendrás que especificar stdcall. Esa directiva indica el orden en que se introducen los parámetros al stack (de izqueirda a derecha o viceversa). Pascal, desde sus inicios, usa el orden inverso y como normalmente las dll están escritas en C, hay que especificar stdcall para que el compildor sepa en qué orden saca los parámetros del stack. Tendrás que preguntarle al proveedor cual es la convención de llamada de la función.

// Saludos
Responder Con Cita
  #9  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Gracias Roman, ya le comente que averigue mas a fondo sobre stdCall, al parecer no lo esta usando en la DLL.



Saludos.


Vicente López
Responder Con Cita
  #10  
Antiguo 25-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo de entrada le preguntaría si la dll es estándar y puedes usarla en otros lenguajes, porque si no, pues ...

// Saludos
Responder Con Cita
  #11  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Cita:
Empezado por roman
...le preguntaría si la dll es estándar y puedes usarla en otros lenguajes
Fué lo primero que le pregunte, pero no tiene idea, lo que pasa es que siempre las ha utilizado para acceder desde otra aplicación hecha en VB.


Gracias.
Responder Con Cita
  #12  
Antiguo 25-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chente(rMan)
Fué lo primero que le pregunte, pero no tiene idea
Pues ¿no fue él quien la programó? La verdad pienso que es su responsabilidad saber la respuesta, y sobre todo, habértela dicho antes de vendértela.

// Saludos
Responder Con Cita
  #13  
Antiguo 25-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Efectivamente el la programo, pero no se habia presentado antes un trabajo de esta manera, accesar a sus DLL's desde otro lenguaje de programación, la solución que me esta dando es usar un OCX en lugar de la DLL, ¿que opinan?
Responder Con Cita
  #14  
Antiguo 18-02-2007
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Respuesta a DLL: No se encuentra punto de entrada del procedimiento

Hola:

El error se genera debido a que VB no puede crear DLLs estandar, VB crea ActiveX DLLs, es por eso que no es posible encontrar un punto de entrada, sin importar si es StdCall o no el paso de parámetros.

Existe un lenguaje llamado Powerbasic (www.powerbasic.com), que permite hacer DLLs con sintaxis de Basic, entre otras cosas (Es un lenguaje creado por las persona que creo Turbo Basic en Borland) y yo lo he utilizado para convertir ActiveX DLLs a DLLs estandar. Tiene algunas características de Delphi, lo cual lo hacen un excelente complemento de VB, esto si es necesario que el DLL sea estandar.

VB si puede llamar de manera natural un ActiveX DLL, es por eso que el DLL funciono anteriomente sin problemas a nivel de VB.

La opción más simple es incorporarlo a tu proyecto como ActiveX y no como DLL.

Suerte
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
Dll y puntos de entrada chete Varios 1 11-01-2006 13:20:28
Error «illegal line ""» en extensión DLL que accede a Firebird Al González PHP 2 19-09-2005 15:16:07
validacion halifax Tablas planas 7 06-02-2005 23:25:53
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58
Ayuda sobre un Procedimiento Almacenado Nuria Firebird e Interbase 6 21-01-2004 13:18:15


La franja horaria es GMT +2. Ahora son las 19:23:33.


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