Amigos del Foro,
Actualmente estoy usando un componente ActiveX y tengo problemas con el parámetro por referencia de la función de este componente.
la definición de la función es:
HRESULT ReadInformation([in] BSTR* szCard, [in] int iTimeChip, [in] int iTimeMag, [in] int iType, [in] BSTR messMag, [out, retval] int *rc)
Definiendo un procedimiento de forma normal que haga uso de la función me salia el siguiente error: "Access violations at address 1381O7AO in module *.DLL. Write of address 00000000"
procedure TForm2.btnConInfClick(Sender: TObject); var .... CardInformation : WideString; begin try ... ReadCardResult:= MyCompActX.ReadInformation(CardInformation, 20, 20, 1, 'INGRESE NUM...'); if Trim(CardInformation) <> '' then ShowMessage(CardInformation); finally MyCompActX.Free; end; end;
Luego haciendo una investigación y sugerencias de unos amigos me indicaron que tenia que hacer uso de punteros con memoria dinámica y llegue a la siguiente solución:
procedure TForm2.btnConInfClick(Sender: TObject); var CardInformation : ^WideString; CardInformation2 : WideString; begin try ... try GetMem(CardInformation, 255 * 2); ReadCardResult:= MyCompActX.ReadInformation(CardInformation^, 20, 20, 1, 'INGRESE NUM...'); CardInformation2 := PWideChar(CardInformation^); finally FreeMem(CardInformation); end; if Trim(CardInformation2) <> '' then ShowMessage(CardInformation2); finally MyCompActX.Free; end; end;
El problema que tengo y las preguntas son las siguiente:
1. La solución me funciona en una versión reciente de Delphi( Delphi Tokyo), cuando intento hacer lo mismo en una versión Delphi 6 me esta generando un error al castear el puntero ( CardInformation2 := PWideChar(CardInformation^); ), ERROR: "invalid pointer operation " pueden ayudarme a identificar donde esta el problema?
2. Capaz con la experiencia de un amigo del foro, capaz haya otra forma de obtener el resultado de la función? o capaz haya otra forma de como consumir la función con memoria dinámica? capaz la forma de castear el puntero en Delphi 6 no lo soporta?
Muchas gracias por sus comentarios y espero me puedan ayudar con sus sugerencias.
Saludos a todos los amigos del Foro.