Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Valor Inaccesible. (https://www.clubdelphi.com/foros/showthread.php?t=14084)

jplj 09-09-2004 10:58:48

Valor Inaccesible.
 
Estoy empleando un componente ActiveX que implementa entre otras la interface IUnidad, que a su vez cuenta con el siguiente método.

Cita:

Método IUnit::GetTextField
Devuelve el texto de un campo de texto.
HRESULT GetTextField( int code, BSTR* text );
Argumentos

code [in] Código del campo.
text [out, retval] Texto del campo
Valor de retorno

En caso de que todo vaya bien devuelve S_OK.
Comentarios

Este método devuelve el texto de un campo de texto dado su código. Si el campo no existe devuelve la cadena vacía

Por algún motivo han lo han modificado, ahora es GetTextField(int code) y devuelve el texto.

El código que empleo es similar a:
Código Delphi [-]

var
   Error: String;
   i, h, j, code: Integer;
   wstr: WideString;
begin
     ...
            wstr:= '';       
              
     ...
           with (Unidad as IUnit) do
           begin 
                  code:= GetTextPos(i);  // (*)
                  if code > -1 then
                  begin
                     wstr:= GetTextField(code);   

                     ModDatos.Textos.Texto.AsString:= wstr; (Modificacion) 
     ...

(*) Esta línea entre otras cosas verifica que para el valor obtendio para code existe un texto.

Bien el problema surge cuando en determinadas circustancias el valor asignado a wstr en la línea wstr:= GetTextField(code) es un "Inaccessible value", y además no se produce ningún error.
Alguna idea de porqué el valor es inaccesible.
¿Qué podría hacer para comprobar si el valor es inaccesible?

Saludos

jachguate 09-09-2004 18:49:47

Supongo que esto te ocurre mientras debugeas tu programa y, o bien añadis la variable al Watch List, o bien cuando posas el mouse para ver su valor en el hint.

Lo que ocurre es que tu programa ha llegado a un punto en que el optimizador (en tiempo de compilación) ha determinado que el valor de la variable ya no es necesario, y tu programa ya lo ha descartado (o bien todavía no está en uso).

Esto ocurre, por ejemplo, después de la última vez que se hace referencia a la variable dentro del procedimiento, función o método donde está.

No es un error, y es algo por lo que no deberias preocuparte.

Hasta luego.

;)

jplj 09-09-2004 19:42:00

Efectivamente es al posar el mouse sobre la variable al depurar.

El codigo que habia puesto es incompleto (ver modificacion), tras la asignacion si empleo la variable, en concreto se la asigno a un campo requerido de una tabla. Es al hacer el post cuando me aparecio el mensaje de error -campo texto requerido ...- que me ha hecho comprobar el valor de wstr.

Saludos.

roman 09-09-2004 19:53:58

Cita:

Empezado por jachguate
Supongo que esto te ocurre mientras debugeas tu programa y, o bien añadis la variable al Watch List, o bien cuando posas el mouse para ver su valor en el hint.

Pero me parece que tampoco se verá en el Watch List. Yo lo que hago es deshabilitar la óptimización (Project|Options|Compiler|Code generation). Claro, sólo mientras depuro. :p

// Saludos

jplj 13-09-2004 10:30:44

He probado lo que decía Roman

Cita:

Empezado por roman
Yo lo que hago es deshabilitar la óptimización (Project|Options|Compiler|Code generation).

Pero al pasar el raton sobre la variable sigue siendo inaccesible el valor.


¿Alguna idea?

Saludos

roman 13-09-2004 15:13:41

Cita:

Empezado por jplj
He probado lo que decía Roman
Pero al pasar el raton sobre la variable sigue siendo inaccesible el valor.

¿Alguna idea?

A veces ni quitando la optimización pues creo que es el linker el que de plano quita el código por considerar que no se usa. Pero puedes poner un ShowMessage para mostrar el valor. Con esto seguro que te lo presenta ya que al usar este procedimiento el linker no le queda más remedio que incluir el código.

// Saludos

jplj 28-09-2004 10:18:02

Ya sé porqué el valor era inaccesible.
El problema era un error en el funcionamiento del componente. Devolvía una cadena vacia en para deternminadas posiciones que no tenían texto asignado.

Gracias por vuestra ayuda.


La franja horaria es GMT +2. Ahora son las 03:46:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi