Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 10-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
crear una dll

hace muchos años que no toco delphi.
me han pedido que haga una dll que utilice sólo datos simples (cadenas y números)

las llamadas a procedimientos tienen que poder recibir parámetros por referencia, es decir, poder modificar su contenido.

... y no se por donde empezar.
os agradecería ayuda.
Responder Con Cita
  #2  
Antiguo 10-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes empezar por mirar el ejemplo que te adjunto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 30-05-2007 a las 15:17:44.
Responder Con Cita
  #3  
Antiguo 10-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,

También puedes echar un vistazo a los "Temas similares" a este hilo que puedes ver abajo de esta misma página. Y/o utilizar el buscador de los Foros, puesto que se ha tratado el tema que te preocupa en más de una ocasión.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 11-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
Muchas gracias

La verdad es que estoy perdido con el tema de qué parámetros se pueden pasar. Teniendo en cuenta que va a ser llamada por aplicaciones hechas en otros lenguajes y que algunos de ellos serán llamadas por referencia (es decir, modificarán su contenido).

Lo miraré a ver si me aclara más, tiene buena pinta.
Responder Con Cita
  #5  
Antiguo 11-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
PChar o cadenas

Sigo "navegando" y por lo que entiendo parece que sólo puedo usar este tipo de dato para enviar/recibir cadenas si quiero que otra aplicación , por ejemplo hecha en VBasic6, C++ pueda realizar las llamadas.

¿Es correcto? ¿Y para los enteros PInt?¿Para los decimales?

Perdonad mi torpeza, pero ya digo hace siglos que no toco Delphi y me está costando un rato.
Responder Con Cita
  #6  
Antiguo 12-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por chete
Sigo "navegando" y por lo que entiendo parece que sólo puedo usar este tipo de dato para enviar/recibir cadenas
¿cual tipo de dato? supongo que te referís a pchar. Si es así, pues si, solamente podes usarlo para cadenas.

Cita:
Empezado por chete
¿Es correcto? ¿Y para los enteros PInt?¿Para los decimales?
Para los enteros, Integer, para los "decimales", podes elegir entre Real48, Real, Double y Extended, usando en todo caso un tipo de datos equivalente en el otro lado (desconozco visual basic, por lo que no puedo ayudarte en este punto, pero supongo que existirán por lo menos los tipos integer y double).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 12-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,

En este mensaje se menciona un tutorial sobre "DLLs" en Delphi que me parece que puede al menos echarte una buena mano.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 12-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
Gracias, pero sigo atascado con los enteros.

Reconozco mi torpeza pero aún no entiendo bien cómo va.
El problema creo que viene porque quiero llamar la dll tanto desde delphi como desde vbasic

es algo tan sencillo como
(delphi)
procedure SetLastCode(newcode :LongInt);stdcall;export;
begin
code:=newcode; //donde code es una vbl. de la dll
end;

vbasic
...
Dim code As Long
If IsNumeric(Text2.Text) Then
code = CLng(Text2.Text)
SetLastCode code
End If

...
Aparentemente funciona (no da error) pero cuando recupero el valor me devuelve 1242776, cuando le dije 69. Y siempre me devuelve ese valor. No se si es que tiene que ser un LongInt, un integer (tb lo probé) o lo que.
Responder Con Cita
  #9  
Antiguo 12-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por chete
Aparentemente funciona (no da error) pero cuando recupero el valor me devuelve 1242776, cuando le dije 69. Y siempre me devuelve ese valor. No se si es que tiene que ser un LongInt, un integer (tb lo probé) o lo que.
¿donde te "devuelve" dicho valor...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 12-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
Pues hombre, es que si pides un 69, te arriesgas a cualquier clase de respuesta.

// Saludos
Responder Con Cita
  #11  
Antiguo 13-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
Thumbs up Parece que he dado con la solución

... y digo parece porque hasta que lo pruebe un poco más no me lo creo.

La forma en la que he conseguido que VBasic "lea" y "escriba" correctamente los números es con PInteger.
Así que
  • PChar, en Delphi, equivale a String en VB
  • PInteger, en Delphi, equivale a Long en VB
Como no necesito, de momento, más que estos datos, como que voy a pasar de seguir volviéndome loco con decimales u otros.
En todo caso gracias por vuestra ayuda y disculpad mi torpeza.

Ejemplo final

procedure SetUrl(direccion: PChar);stdcall;export;
var
strURL:string;
begin
//inicializacion de variable. (no se puede asignar directamente).
strURL:='';
//asignación del valor nuevo
strURL:=direccion;
//creación de la variable con el nuevo valor.
url:=PChar(strURL);
end;

function GetURL():PChar;stdcall;export;
var
url:string;
begin
url:=ThumbPrint;
GetURL:=PChar(url);
end;

function GetLastCode():PInteger;stdcall;export;
begin
GetLastCode:=PInteger( lastCode);
end;


y en vbasic me creo un módulo para las dll.
Public Declare Sub SetUrl Lib "C:\pruebas\delphi\vb\DLLAtidenet.dll" (ByVal direccion As String)
Public Declare Function GetUrl Lib "C:\pruebas\delphi\vb\DLLAtidenet.dll" () As String
Public Declare Function GetLastCode Lib "C:\pruebas\delphi\vb\DLLAtidenet.dll" () As Long


y en el formulario llamo a las funciones.
Dim direccion As String
Dim code As Long
direccion = Text1.Text
SetUrl direccion


code = GetLastCode
Text2.Text = CStr(code)
Responder Con Cita
  #12  
Antiguo 13-01-2006
chete chete is offline
Registrado
 
Registrado: ene 2006
Ubicación: TUI-Pontevedra
Posts: 8
Poder: 0
chete Va por buen camino
Smile y añadiendo un poquitito más.

Parte del problema es el modo de pasar los valores, como decía en el post anterior PChar, PInt, porque si no empezarán los problemas.

Pero también hay que tener mucho cuidado con como asignamos valores. En una función que pase parámetros por referencia, o en una función que devuelve algo, hay que fijarse en cómo se le asigna el valor.
Por ejemplo
Si tengo esta función
procedure GetDocumentListResponseDoc(
docIndex:PLongint ;
var documentID:PLongint;
var superState:PChar;
var state: PChar;
var format:PChar;
var submissionDate:PChar;
var documentNumber:PChar;
var documentFunction:PChar;
var docType:PChar;
var companyName:PChar;
var identityCount:PLongint);stdcall;export;


No se puede cojer directamente y hacer algo así
superState:=PChar('Nuevo');

en la segunda cadena se perderán los valores.
Os pongo la función para que la tengáis pues a mí me ha dado un buen dolor de cabeza :

procedure GetDocumentListResponseDoc(
docIndex:PLongint ;
var documentID:PLongint;
var superState:PChar;
var state: PChar;
var format:PChar;
var submissionDate:PChar;
var documentNumber:PChar;
var documentFunction:PChar;
var docType:PChar;
var companyName:PChar;
var identityCount:PLongint);stdcall;export;
var
cad:string; //variable para almacenar el resultado a guardar.
begin
documentID:=plongint(12);
cad:='';
cad:='OPEN';
superState:=PChar(cad);
cad:='';
cad:='NEW';
state:=PChar(cad);
cad:='';
cad:='XMLTLR';
format:=PChar(cad);
cad:='';
cad:='2005-0101';
submissionDate:=PChar(cad);
cad:='';
cad:='R99';
documentNumber:=PChar(cad);
cad:='';
cad:='ORIGINAL';
documentFunction:=PChar(cad);
// docType:=PChar('ORDER');
// companyName:=PChar('MyCompany');
identityCount:=PLongint(3);
end;
Responder Con Cita
  #13  
Antiguo 13-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Offtopic...

chete, prueba a poner tu código delphi entre los TAG's [ delphi ]..[ /delphi ]
(sin los espacios), verás como la visualización mejora.

Revisa el uso de los TAG's.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 14-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por roman
Pues hombre, es que si pides un 69, te arriesgas a cualquier clase de respuesta.

// Saludos
pero claro!!! no me había dado cuenta del detalle.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
crear DLL para utilizar con ASP altp Varios 0 29-11-2005 12:14:31
Crear DLL Dario Gustavo Varios 3 24-02-2005 14:46:00
crear una dll Rafa Varios 3 27-01-2004 20:09:38
Crear Dll Trigger API de Windows 8 15-12-2003 16:06:09
crear ocx o DLL??? torito Varios 3 23-06-2003 18:09:25


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


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