Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Responder Con Cita
  #2  
Antiguo 29-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
[..]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.
Responder Con Cita
  #3  
Antiguo 30-09-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Responder Con Cita
  #4  
Antiguo 30-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.

Última edición por ecfisa fecha: 30-09-2010 a las 08:23:30.
Responder Con Cita
  #5  
Antiguo 30-09-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Muchas gracias ecfisa, has sido muy amable.
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
Funcion ABS brandolin SQL 5 24-01-2009 14:53:38
Variante de OpenDialog YaninaGenia Varios 7 18-11-2005 19:55:26
Una nueva variante del virus Sober se extiende por correo electrónico Sasuke_Cub Noticias 2 09-10-2005 14:41:11
Variante comparado con evaluación completa Al González Providers 2 18-08-2005 04:19:32
funcion agora18 SQL 1 06-10-2003 07:18:30


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


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