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; NroDoc := '10000000';
idIVA := 1; error := CargarDatosCliente(PAnsiChar(Nombre1), PAnsiChar(Nombre2), PAnsiChar(Direccion1), PAnsiChar(Direccion2), PAnsiChar(Direccion3), TipoDoc , PAnsiChar(NroDoc), IdIVA);
ShowMessage( IntToStr(error) );
End;
Saludos.