Hallo Wolfgang,
ich versuche es nochmal zu spezifizieren anhand dieser einen Methode. Ich habe mein Interface von RKSVCom auf RKSVINT umgetauft, damit die Namensgleichheit mit der Klasse RKSVCom aus RKSVComComplete wegfällt:
Code: Select all
// Meine Klasse, die ich aus meinen Programmen anspreche
// Davon mal abgesehen, dass RKSV nicht vom Compiler akzeptiert wird
// Die App heißt _RKSV 1.76 und nicht RKSV, sollte also nicht das Namensproblem verursachen
// Methoden decken sich großteils mit gleichnamigen aus RKSVInt aber nicht mit allen
CLASS RKSV
PROTECT _oRKSVINT AS RKSVINT // Interfaceklasse für RKSVCom aus RKSVComComplete von ITG
METHOD ConvertJWSCompactToText(cJws AS STRING) AS STRING PASCAL
// Wandelt einen JWS-String in normalen Text um
// -> Input: JWS-String
// -> Return: Umgewandelter JWS-String oder NULL_STRING
LOCAL cResult AS STRING // Rückgabe aus RKSVCom: Umgewandelter JWS-String
LOCAL cAnswer AS STRING // Rückgabe aus RKSVCom: Fehlertext
LOCAL lRet AS logic
// Die beiden REF Parameter müßten doch mit @ angegeben werden, zumindest in VO wars so?
lRet := _oRKSVINT:ConvertJWSCompactToText(cJws, @cResult, @cAnswer) // [1]
// Anhand der Rückgabe aus RKSVCom werden Rückgabewert oder Fehlermeldung erstellt
DO CASE
CASE Empty(cResult)
_cMsgLast := "Kein gültiger JWS-String"
_cMsgFirst:= IIF(Empty(_cMsgFirst), _cMsgLast, _cMsgFirst)
CASE !lRet
_cMsgLast := StrTran(_RKSV_ConvertJWSCompactToText, "%ERROR%", cAnswer)
_cMsgFirst:= IIF(Empty(_cMsgFirst), _cMsgLast, _cMsgFirst)
cResult := NULL_STRING
ENDCASE
RETURN cResult
// Interfaceklasse für RKSVComComplete von ITG
// Wird nicht direkt aus meinen Programmen angesprochen
// Entsprach in VO den generierten Prototypen
USING RKSVComComplete
CLASS RKSVINT
PROTECT _oRKSVCom AS RKSVCom // Klasse aus RKSVComComplete von ITG
METHOD ConvertJWSCompactToText(;
jwsCompact AS STRING,; // AS STRING
text AS STRING,; // REF STRING
errorMessage AS STRING; // REF STRING
) AS LOGIC
LOCAL lRetValue AS logic
// Wenn X# den @ nicht braucht, dann lassen wir ihn mal weg
lRetValue := _oRKSVCom:ConvertJWSCompactToText(jwsCompact, text, errorMessage) // [2]
RETURN (lRetValue)
Das bringt den Fehler
Code: Select all
error XS1503: Argument 2: cannot convert from 'System.IntPtr*' to 'string" bei [1]
Gebe ich die beiden @ bei [1] jedoch weg, bekomme ich die Warning
Code: Select all
warning XS9071: Parameter 2 needs a(n) 'Ref' modifier. This modifier was automatically added bei [2]
Gebe ich den @ bei [2] dazu, compiliert X# ohne Fehler.
Laut Compiler wäre dann der REF Parameter in meiner Klasse RKSV [1] ohne und im Interface RKSVINT [2] mit @, also genau umgekehrt!
Aber funktioniert das dann auch, wie ist das mit verschachtelten REF Parametern?