Du bist doch schon nah dran. Nochmal etwas Code, diesmal kommentiert:
Delphi-Quellcode:
function bp4422_init(COMPort: integer; baudRate: integer; timeout_seconds: double; blockCheck: integer; groupAddress: integer; userAddress: integer; instrumentIDString: PChar; resetDevice: integer; var instrumentID: Integer): integer; stdcall; external DLLNAME;
var
instidstring: AnsiString;
instid: integer;
begin
(* Speicher für einen String mit 3 Zeichen reservieren *)
SetLength(instidstring, 3);
(* Funktion aufrufen, dabei einen Zeiger auf den String übergeben *)
error := bp4422_init(4, 9600, 2, 0, 0, 0, PAnsiChar(instidstring), 0, instid);
(* Nach korrekter Befüllung ist der String u.U. zu lang für den Inhalt, deshalb auf Datenlänge kürzen *)
SetLength(instidstring, StrLen(PAnsiChar(instidstring)));
Statt mit PAnsiChar(instidstring) kannst Du es auch mit @instidstring[1] versuchen.