![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
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. |
|
#2
|
||||
|
||||
|
A lo mejor te puedo ayudar con un ejemplo:
Si tenemos en una librería hecha en Delphi esta función:
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;
}
|
|
#3
|
|||
|
|||
|
¡¡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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|