Jump to content


Photo

Conversion de C++ a Delphi


  • Please log in to reply
3 replies to this topic

#1 jjmcira

jjmcira

    Member

  • Miembros
  • PipPip
  • 26 posts

Posted 18 April 2014 - 07:29 PM

Hola A todos me pudieran por favor ayudar a convertir esta función de C++ a Delphi, ya que es para un proyecto de lectura de tarjetas de un Lector que necesito realizar.



delphi
  1. int WINAPI BII_Get_Wiegand_String_MT(HUNIT pUnitHandle, unsigned int *WiegandString, unsigned int *NoWiegandBits, unsigned int *Id, int timeout);



Gracias por su ayuda.

  • 0

#2 jjmcira

jjmcira

    Member

  • Miembros
  • PipPip
  • 26 posts

Posted 18 April 2014 - 08:08 PM

S pudieran tambien ayudarme con este otro codigo complemento del anterior.

Gracias


delphi
  1. unsigned int NoOfBits = 0;
  2. unsigned int templateID = 0;
  3.     int timeout = 12;
  4.     unsigned int wiegandString[2];// = new uint[2];
  5.  
  6.     InputWiegandInfo *proxCardInfo = new InputWiegandInfo();
  7.  
  8. int result = BII_Get_Wiegand_String_MT(m_hUnit, wiegandString, &NoOfBits, &templateID, timeout);
  9.     if (result < 0)
  10.     {
  11. MessageBox("Error in reading predefined wiegand string.");
  12.         return NULL;
  13.     }


  • 0

#3 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 posts
  • LocationMisiones, Argentina

Posted 19 April 2014 - 11:57 AM

Sería algo así creo.
Supongo que alguien corregirá mis errores de apurado (como Escafandra con mi traducción de C#).



delphi
  1. var
  2. TimeOut, _Result: Integer;
  3. NoOfBits, TemplateID: Word;
  4. WiegeandString: Array[1..2] of Word;
  5. InputWiegandInfo: ^proxCardInfo; // Aunque proxCardInfo deberá estar definido de antemano (es un tipo)
  6. begin
  7.   _Result:= BII_Get_Wiegand_String_MT(m_hUnit, WiegandString, @NoOfBits, @TemplateID, TimeOut);
  8.   if _Result < 0
  9.   then
  10.     begin
  11. ShowMessage('Error in reading predefined wiegand string.');
  12. Result:= ; // Ooops.
  13.     end else Result:= _Result;
  14. end;



BII_Get_Wiegand_String_MT es una función que no está definida en estas líneas de código.
Dado que result palabra reservada, no podrás utilizarla como nombre de variable.
Result:= nil sería lo correcto, pero dado que antes devuelves un valor de tipo entero, deberías ver como podrías definir la función para que devuelva un valor de tipo puntero y utilizar casting para obtener un valor o nil en caso de ser BII_Get_Wiegand_String_MT < 0.
Es decir que podrías definir una variable como puntero a entero y definir esta función para que te devuelva el valor dentro de esa variable, luego puedes usar NomVarEntera^ para obtener el valor o NomVarEntera para saber si está asignada preguntando por nil o con la función assigned.
Saludos
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 21 April 2014 - 04:33 AM

A falta de conocer algúno de los tipos usados, como HUNIT, la tracucción de la declaración de la función sería así:



delphi
  1. function BII_Get_Wiegand_String_MT(pUnitHandle: HUNIT; WiegandString, NoWiegandBits, Id: PUINT; timeout: integer): integer; stdcall;



Dicha función habría que importarla de alguna dll de la que no informas.

Tu segunda pregunta, a cerca de como usas esa función, te la respondo de esta forma:


delphi
  1. var
  2.   NoOfBits: UINT;
  3.   templateID: UINT;
  4.   timeout: integer;
  5.   wiegandString: array [0..1] of UINT;
  6. begin
  7.   NoOfBits:= 0;
  8.   templateID:= 0;
  9.   timeout:= 12;
  10.  
  11.   // InputWiegandInfo *proxCardInfo = new InputWiegandInfo();
  12.  
  13.   if BII_Get_Wiegand_String_MT(m_hUnit, @wiegandString[0], @NoOfBits, @templateID, timeout) < 0 then
  14.   begin
  15.       ShowMessage('Error in reading predefined wiegand string.');
  16.       Result:= nil;
  17.       exit;
  18.   end;
  19. end;



La linea no traducida y comentada (por no usarse en el fragmento de código dado podría traducirse, asumiendo que InputWiegandInfo es una clase (podría ser una estructura):


delphi
  1.   proxCardInfo:= InputWiegandInfo.Create();



En resumen, sin conocer los tipos usados no se puede terminar de traducir el código para que te compile en delphi.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.