FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problemas con punteros
Buenas:
Soy programador en Java, Visual Basic, C++ y ahora por motivos de trabajo me veo obligado a pelearme con Delphi. Y me encuentro con un problema, que no he sido capaz de solucionar pero que tengo la impresion que se debe a mi corto conocimiento del lenguaje. Estoy haciendo una DLL que se pueda usar en un entorno Windows desde cualquier lenguaje de programacion, estoy haciendo pruebas con .Net y con VB6. Y tengo dentro de mi DLL una Unit con el siguiente metodo: La idea de este metodo es que una llamada SOAP me devuelva los valores y yo los almacene en estos Punteros que le paso por parametro y los recupere desde la aplicacion cliente que usa esta DLL. Pero me pasa algo muy curioso, en principio si depuro los valores dentro del codigo de la DLL estan bien pero al devolver los punteros estan con algunos caracteres extraños. Y es mas, cuando los asigno por ejemplo a un campo de texto tipo TEdit de la siguiente manera : los valores de los otros punteros se van modificando mientras voy realizando las asignaciones y el valor que tenian cuando la funcion me devolvio se va modificando sin yo hacer nada mas que la asignacion que pongo arriba. Ademas me aparecen los valores de unos en otros sin yo haberselos asignado. Este es el metodo que uso para invocarlo : Supongo que sera una chorrada fruto de mi desconocimiento pero no he sido capaz de arreglarlo. Cualquier ayuda sera bien recibida. Muchas gracias. Última edición por jmariano fecha: 01-02-2006 a las 15:07:50. |
#2
|
||||
|
||||
El problema es que estas devolviendo un puntero a una variable local, la memoria que corresponde a esa variable es liberada al terminar. Y aunque mantiene parte de la informacion que contenia durante un poco de tiempo, aparecen caracteres estraños y va siendo reemplazada por el contenido de otras variables.
|
#3
|
|||
|
|||
ME podrias poner un ejemplo por favor de como lo harias tu? SI no te importa, ya he comentado que soy nuevo y he de hacerme un poquito a las convenciones del lenguaje.
Muchas gracias de antemano. |
#4
|
||||
|
||||
Podemos hacerlo de forma parecida a como se hace en C. Reservamos una porcion de memoria, y copiamos el contenido del string en ella.
Donde tu haces Código:
Pstate:=PChar(sState); Código:
GetMem(Pstate,lenght(sState)+1); StrCopy(Pstate,PChar(sState)); Y recuerda que despues de usar el valor devuleto hay que liberar la memoria que ya no necesitamos. Código:
txtSSGetDocListRespDoc.Text := String(SsuperState); FreeMem(Sstate); |
#5
|
|||
|
|||
Muy bien, funciona!! Solo tengo 2 pegas
La primera es que cuando hago el FreeMem me da un casque .. realmente hace falta o existe un garbage collector como en JAva que se encarga de recoger la basura? La segunda es que esto se haya dentro de una DLL y por ejemplo en VB6 no existe la posibilidad de hacer el FreeMem, habria alguna otra posibilidad De todas maneras muchisimas gracias por la ayuda ... creo que ya entiendo lo que estaba pasando, mola esto de empezar con un lenguaje nuevo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas con instalacion y archivo idr20009.dll | allende | Varios | 0 | 19-01-2006 15:46:33 |
Problemas al Empaquetar una aplicación con... | oracle | Varios | 1 | 26-07-2005 15:46:22 |
Problemas Access, DbImage - Objeto OLE | jsc | Conexión con bases de datos | 3 | 27-01-2005 21:41:37 |
problemas con campos y sum | Giniromero | SQL | 3 | 22-12-2003 20:40:45 |
|