Ist es möglich zu definieren, ein CAPL-Funktion zurückgeben einer Zeichenfolge?
Entwickle ich CAPL-scripts in Vector CANoe und ich brauche, um zu definieren, mehrere Funktionen Rücksendung von text-strings. In C würde ich etwas schreiben wie dieses:
char * ErrorCodeToMsg(int code)
oder
char [] ErrorCodeToMsg(int code)
In CAPL, beide Definitionen scheitern mit einem parse error
. Die einzige funktionierende Lösung, die ich kam mit, so weit ist:
variables {
char retval[256];
}
void ErrorCodeToMsg(int code) {
char [] msg = "Hello word";
strncpy(retval, msg, 256);
}
Dies ist natürlich sehr unschön, weil jeder Aufruf ErrorCodeToMsg
benötigt zwei Anweisungen anstelle von einem. Gibt es einen besseren Weg?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie es zu tun, als würden Sie mit string-Funktionen :
Wird der Wert, gespeichert in dem Puffer unter Verwendung der Referenz-Wert. Es ist nicht möglich, Rückgabe-string in Capl. Dies ist der Grund, warum Sie keinen Zugriff auf String-Variablen des Systems mit der
@
Selector.char *
Rückgabewert zu könnenwrite("Error: %s", ErrorCodeToMsg(errno))
Dank für die Bestätigung das es nicht passieren wird.Habe ich implementiert einen workaround für Funktionen, die Rückgabewerte Zeichenfolge-Konstanten. Es besteht in der Festlegung einer Reihe von möglichen Rückgabewerte
char errorMsg[][]
und definieren eine Funktionint ErrorCodeToMsg(errno)
die Renditen und den index in das array, so ist es so aufgerufen:Beachten Sie, dass diese Methode ist fehleranfällig, wenn manuell codiert, da es leicht zu Holen Sie sich die Funktion und das array-out-of-sync nach einer änderung. In meinem Fall, Fehlercodes sind definiert in der Spezifikation (XML-Datei), so dass ein array von Fehlermeldungen und die
ErrorCodeToMsg
Funktion werden automatisch generiert.