Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Función VariantCopy de OLEAut32.dll con variante varByRef (VT_BYREF) (https://www.clubdelphi.com/foros/showthread.php?t=70098)

Al González 29-09-2010 21:17:45

Función VariantCopy de OLEAut32.dll con variante varByRef (VT_BYREF)
 
Hola amigos.

Me encuentro investigando un raro comportamiento de la función VariantCopy contenida en la biblioteca OLEAut32.dll de Windows.

Su declaración en Delphi es:

Código Delphi [-]
function VariantCopy(var Dest: TVarData;
  const Source: TVarData): HRESULT; stdcall;

Según he podido comprobar, dicha función arroja el código de error DISP_E_BADVARTYPE (VAR_BADVARTYPE en Delphi) cuando el tipo de alguno de los variantes dados (Dest o Source) tiene la bandera VT_BYREF (varByRef en Delphi).

La única información específica que he encontrado sobre esto es un documento de PowerPoint que no puedo abrir con mi Office 2000 (por ser del nuevo formato .pptx), y en el cual tampoco he logrado encontrar lo que busco con Google Docs.

Este es el archivo: http://www.azimuthsecurity.com/resou...ith_dewey.pptx

El buscador de Google me muestra un resumen que dice:

Cita:

VariantCopy() is potentially unsafe when VT_BYREF is set! [...]
Básicamente me interesa conocer todo lo que el autor dice referente a esa función y a la bandera VT_BYREF, y sobremanera el párrafo que cité. Si alguien pudiera echarme una mano con este asunto, se lo agradecería. :)

Me pareció una buena idea pedírselos aquí, ya que este hilo pudiera servirle a alguien más que se topara con el mismo problema. La siguiente es una prueba muy simple que muestra el fallo mencionado (ejecutado en Windows XP al día con los parches):

Código Delphi [-]
Uses
  VarUtils;

procedure TForm1.Button1Click(Sender: TObject);
Var
  H :HResult;
  V1, V2 :Variant;
begin
  TVarData (V1).VType := varByRef;
  H := VariantCopy (TVarData (V1), TVarData (V2));
  VarResultCheck (H);
end;

En teoría y según algunos documentos, VariantCopy debería simplemente limpiar el variante destino antes de copiarle el origen, pero no ocurre eso. Por otra parte, no sé qué sucede con el sitio http://msdn.microsoft.com/ (¿saben si tuvo alguna caída este miércoles?).

Saludos.

Al González. :)

Casimiro Notevi 29-09-2010 21:34:50

Cita:

Empezado por Al González (Mensaje 377909)
[..]Por otra parte, no sé qué sucede con el sitio http://msdn.microsoft.com/ (¿saben si tuvo alguna caída este miércoles?).
Saludos. Al González. :)

Ahora mismo está funcionado.

Al González 30-09-2010 03:09:42

Gracias Antonio.

Lo del sitio de Microsoft se debía aparentemente a un problema del contrafuegos. En la más que recomendable MSDN Library no hay referencia a este problema bajo el apartado de la función VariantCopy (aunque puede que buscando un poco más encuentre algo).

Ya pude abrir el archivo que les señalé, pero la cita que referí no habla precisamente del problema que reporto. Para evitarlo, me va a tocar validar los casos donde, en una asignación entre variantes, esté involucrada la bandera varByRef.

Afortunadamente no es algo muy común.

Saludos.

Al González. :)

ecfisa 30-09-2010 08:10:00

Hola Al.

Me alegra que hayas podido abrir el archivo.
Subí el archivo en formato .pps (office 2000) aca , y aunque yá sea tarde, quizá te pueda servir el saber que el OpenOffice 3.1 no tuvo problemas
para leer el .pptx; por si se te presenta un problema similar en el futuro.

Saludos. :)

Al González 30-09-2010 18:22:33

Muchas gracias ecfisa, has sido muy amable. :)


La franja horaria es GMT +2. Ahora son las 11:47:06.

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