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!