Ver Mensaje Individual
  #1  
Antiguo 17-10-2013
roberto_alg roberto_alg is offline
Registrado
NULL
 
Registrado: abr 2013
Posts: 5
Reputación: 0
roberto_alg Va por buen camino
Problema con Psafearray

Hola gente,
Tengo un pequeño gran problema, pequeño porque estoy seguro que es fácil de resolver, grande porque llevo varios dias estancado.
Os comento, quiero enviar un Psafearray desde un serverCOM y luego recuperar esos datos.
En realidad quiero enviar pares nombre-valor donde el nombre seria string y el valor tipo integer, pero primero que funcione esto.
Os paso el sencillo codigo de test que estoy haciendo. Al pulsar el botón me tiene que mostrar el valor de un elemento del Psafearray
Le he añadido una comprobación que me dice que estoy enviando mal los parámetros con SafeArrayGetElement y me dice que está mal enviados, pero no se por qué. He mirado mil ejemplos y nada. Los misterios de los safearrays, la documentación de msdn, pero no encuentro el fallo o fallos

function pipo:PsafeArray;
var
Data: Variant;
SafeArray: PSafeArray;

begin
Data := VarArrayCreate([0, 1], VT_VARIANT);
Data[0]:=1;
Data[1]:=2;
SafeArray := PSafeArray(TVarData(Data).VArray);
result:=SafeArray;
end;


procedure TForm2.Button1Click(Sender: TObject);
var

SafeArray: PSafeArray;
LBound, HBound, I : Integer;
D: integer;

begin
safeArray:=pipo;
SafeArrayGetLBound(safeArray, 1, LBound); //esto lo imprimo y sale correcto
SafeArrayGetUBound(safeArray, 1, HBound); //esto lo imprimo y sale correcto
I:=0;

if E_INVALIDARG=SafeArrayGetElement(safeArray, I, D) then
begin
showMessage('caca de argumentos'); //siempre sale caca
end
else begin
showMessage('argumentos niquelados');
end;

showMessage(inttostr(D));
end;

Os estaría bastante agradecido!
Responder Con Cita