Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - E2010 Inkompatible Typen: 'string' und 'PAnsiChar'


Lsm09 - Sa 08.01.11 21:26
Titel: E2010 Inkompatible Typen: 'string' und 'PAnsiChar'
Hallo,
ich habe folgendes Problem:
Wenn ich folgendes eingebe

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var s: string;
begin
S:= '/C net send 192.168.178.10 ' + edn.text;
if Radiobutton1.Checked = true then

ShellExecute(Application.Handle, 'open''cmd', S, nil, SW_HIDE);
end;

kommt heraus:
E2010 Inkompatible Typen: 'string' und 'PAnsiChar'
Wie behebe ich das?

Lsm09


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 09.01.2011 um 00:14


jaenicke - Sa 08.01.11 21:28


Delphi-Quelltext
1:
PChar(S)                    


Lsm09 - So 09.01.11 13:37

??


Delete - So 09.01.11 13:42

Du musst S nach PChar casten.


elundril - So 09.01.11 13:48

Ok, mal die Erklärbär-Version:

Du hast S als String vorliegen. Das ist in Delphi ein eigener Datentyp, der nach bestimmten Spezifikationen aufgebaut ist. Blöderweise ist aber ShellExecute keine Funktion die Delphi mitbringt, sondern eine die von der WinAPI kommt, also vom Betriebssystem. Und diese Routine will keinen String übergeben haben sondern einen Pointer auf eine Zeichenkette, genannt PChar. Damit wir jetzt einen String umwandeln können, schreiben wir einfach PChar und dahinter in klammer das unseren Variablennamen bzw unseren String selbst. Dadurch bekommt ShellExecute nicht mehr den String sondern einen PChar, weil wir den String ja zuerst umgewandelt haben.

Also schreibst zu einfach in ShellExecute statt dem S ein PChar(S) hin und alles ist gut.

lg elundril


Lsm09 - So 09.01.11 14:20

DANKE!!!
hat mir sehr geholfen!!

Programm läuft!

Lsm09