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 30-07-2006
HAL9000 HAL9000 is offline
Registrado
 
Registrado: jul 2006
Posts: 2
Poder: 0
HAL9000 Va por buen camino
ayuda con shortstring de Delphi en C++

Hola a todos:

Soy nuevo en el foro y he ingresado exclusivamente para preguntar una duda.
Vereis, no soy programador de Delphi ni de Pascal (Aunque si de Modula2...) y necesito usar una "dll" escrita en Delphi en un programa en C++.

El caso es que en la "dll" se hace uso del tipo shortstring y no consigo ni bien ni mal hacer que que mis cadenas de C++ funcionen como shortstring.

Se que el Borland C++ Builder da soporte directo para este tipo de cadenas, pero yo estoy empleando MS Visual studio 2005.

¿Alguien puede ayudarme a definir un tipo shortstring en C++?
Hasta ahora se que el shortstring es una cadena de 256 caracteres y que en el primero se almacena la longitud de la cadena. Lo que no sé es si termina en cero (imagino que no) y como están rellenos el resto de caracteres de la cadena (imagino que son nulos).

El caso es que he probado ambas combinaciones y no consigo hacer que funcione.

Si alguien programa en C++ adjunto el código de mi programa (casca la función setBSCpath() ):

Código:
 
char ruta[256];
ruta[0]=3;
ruta[1]='C';
ruta[2]=':';
ruta[3]='\\';
micatalogo.SetBSCpath(ruta);

y también adjunto la especificacion e implementación de la función de la "dll" en Delphi:

Código:
 
procedure SetBSCpath(path : shortstring); stdcall;

Código:
 
procedure SetBSCpath(path : shortstring);
var i : integer;
begin
if path<>Bscpath then for i:=1 to CacheNum do cachelst[i]:=0;
BSCpath:=path;
end;

Un saludo a todos y muchas gracias a los respondones.
Responder Con Cita
  #2  
Antiguo 30-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
A lo mejor te puedo ayudar con un ejemplo:

Si tenemos en una librería hecha en Delphi esta función:
Código Delphi [-]
procedure Mensaje(Str: ShortString); stdcall;
var
  s: string;
begin
  s:= 'El mensaje es: ' + Str;
  MessageBox(0,PChar(S),'Hola',0);
end;

Podemos hacer un pequeño programa en C que la utilice de la siguiente manera:
Código:
#include <stdio.h>
#include <windows.h>

typedef int (*MYPROC)(char *str);

int main(int argc, char *argv[])
{
 HINSTANCE hinstLib; 
 MYPROC ProcAdd; 
 char s[256];
 
 strcpy(&s[1], "Hola mundo");
 s[0] = strlen(&s[1]);
 
 hinstLib = LoadLibrary("libreria.dll"); 
 if (hinstLib != NULL) 
 { 
  ProcAdd = (MYPROC) GetProcAddress(hinstLib, "Mensaje"); 
  if (ProcAdd != NULL) 
    (ProcAdd) (s); 
  else
    printf("No puedo cargar la libreria\n");
    FreeLibrary(hinstLib); 
 } 
 return 0;
}
Responder Con Cita
  #3  
Antiguo 01-08-2006
HAL9000 HAL9000 is offline
Registrado
 
Registrado: jul 2006
Posts: 2
Poder: 0
HAL9000 Va por buen camino
¡¡SOLUCIONADO!!

Gracias Seoane. Indirectamente me has ayudado muchísismo.
Tras ver tu post decidí verificar si la implementación de las llamadas a la "dll" estaba hecho correctamente (era un archivo distribuido junto a la dll y al fichero de encabezamientos) y voila... no existía implementación de la función setBSCPath()... aunque si estaba el prototipo en el header.

Ya me funciona correctamente, muchas gracias de nuevo.
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
ayuda con delphi darkbits Varios 2 12-07-2006 15:33:39
Instalar Ayuda (.HLP) en la Ayuda de Delphi? MasterXP Varios 6 12-04-2006 06:57:49
Ayuda con delphi 7 tato Varios 3 19-12-2005 20:46:35
Una Ayuda en Delphi Javier rafael Lazarus, FreePascal, Kylix, etc. 9 03-11-2005 10:45:37
No puedo abrir la ayuda de delphi 8/delphi 2005 ASAPLTDA Varios 0 24-12-2004 16:20:53


La franja horaria es GMT +2. Ahora son las 03:38:53.


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