Ver Mensaje Individual
  #12  
Antiguo 25-11-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En primer lugar Nombre1: Array of char[] es un error sintáctico en delphi. en todo caso sería Nombre1: Array of char
En segundo lugar, un array no es un String por lo que no puedes asignarle uno.

Para encontrar el puntero tipo CHAR de un String delphi basta con hacer el cast PAnsiCHAR(Nombre1) Eso convierte el String a Cadena estilo C
Si usas PAnsiCHAR la conversión será a un CHAR clásico de tamaño 1 BYTE.
En el caso de versiones de delphi UNICODE PCHAR es lo mismo que PWCHAR por lo que lo mejor es usar explicitamente PAnsiCHAR si queremos que la cadena no se interprete como UNICODE. Este bonito galimatías se lo debemos a Embarcadero y trae numerosas confusiones a la hora de usar código antiguo en versiones modernas de delphi.

Ahora, para esa función que propones, tu código quedaría así:

Código Delphi [-]
type
  TCargarDatosCliente  = function ( nombre_o_razon_social1 :PansiChar;  nombre_o_razon_social2 :PansiChar;
                                   domicilio1 :PansiChar; domicilio2:PansiChar;  domicilio3:PansiChar;
                                 id_tipo_documento :LongInt; numero_documento:PansiChar; id_responsabilidad_iva :LongInt): LongInt; StdCall;

var
  Nombre1: String;
  Nombre2: String;
  Direccion1: String;
  Direccion2: String;
  Direccion3: String;
  TipoDoc: LongInt;
  NroDoc: String;
  idIVA: LongInt;
  error: LongInt;
  CargarDatosCliente: TCargarDatosCliente;
Begin
  @CargarDatosCliente := GetProcAddress(dll, 'CargarDatosCliente');

  Nombre1:= ' JUAN PEREZ';
  Nombre2:= '';
  Direccion1:= 'Calle Nº';
  Direccion2:= 'Localidad..';
  TipoDoc := 1; //DNI
  NroDoc := '10000000';
  idIVA := 1; //IVA Insc
  error := CargarDatosCliente(PAnsiChar(Nombre1), PAnsiChar(Nombre2), PAnsiChar(Direccion1), PAnsiChar(Direccion2), PAnsiChar(Direccion3), TipoDoc , PAnsiChar(NroDoc), IdIVA);
  ShowMessage( IntToStr(error) );
End;


Saludos.

Última edición por escafandra fecha: 25-11-2018 a las 00:37:53.
Responder Con Cita