Ver Mensaje Individual
  #7  
Antiguo 29-03-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por LoPiTaL Ver Mensaje
Hola, roman. ¿Realmente funcionaría este código? Si alguno de los campos en a tiene como valor $00 (caracter final de string), entonces no podrías recuperar lo que vaya después, perdiendo parte de la estructura...
Sí que puedes. Recuerda, un string, pese a lo que normalmente entendemos por él (una secuencia de caracteres alfanuméricos), en realidad puede almacenar cualquier secuencia de bytes, incluido el cero. El detalle aquí es cómo recuperas la información. Si utilizas un string para almacenar caracteres no alfanuméricos, no puedes esperar usar dicho string en contextos alfanuméricos, por ejemplo, en un ShowMessage.

Haz esta prueba (con la declaración que yo puse del SafeArray):

Código Delphi [-]
var
  a, b: TSafeArray;
  s: String;

begin
  a.cDims := 84;
  a.fFeatures := 3254;
  a.cbElements := 0;
  a.cLocks := 6;

  SetLength(s, SizeOf(a));
  Move(a, s[1], SizeOf(a));

  ZeroMemory(@b, SizeOf(b));
  Move(s[1], b, SizeOf(b));
end;

b debe contener una copia exacta de a.

// Saludos
Responder Con Cita