Ist es möglich, Ref-Parameter in SAFEARRAY zu marshalieren?

9

Hier ist meine C # Server-Methode:

%Vor%

Mein C ++ - Client richtet diese Methode ein und ruft sie auf. Das funktioniert gut, aber die Status- und Ausgabevariablen scheinen nicht verkettet zu sein. Es ist, als würden sie nach Wert anstatt nach Referenz weitergegeben.

Hier ist mein Kundencode:

%Vor%

Kann jemand Hilfe beim Einrichten der SAFEARRAY-Argumente geben, damit die Ref-Parameter zurückkopiert werden?

    
user1246439 16.09.2012, 01:32
quelle

1 Antwort

0

Ich weiß vielleicht nicht die vollständige Antwort, aber ich sehe zwei Dinge in Ihrem Code:

String wird nicht korrekt als Referenz übergeben

Zeichenfolgen in C # sind unveränderliche Referenzobjekte. Dies bedeutet, dass Verweise auf sie (nach Wert) weitergegeben werden, und sobald eine Zeichenfolge erstellt wird, können Sie sie nicht ändern. Wenn Sie den Zeichenfolgenwert ändern, erstellen Sie eine neue Zeichenfolge und ändern den lokalen Verweis darauf.

Es gibt eine großartige Erklärung darüber hier

Sie müssen also die Definition Ihrer C # -Funktion in etwa so ändern:

%Vor%

Sie sollten ref statt out verwenden

Sie scheinen Argumentwerte zu initialisieren, bevor der C # -Funktionsaufruf nicht selbst in Funktion geht.

Sie sollten also ref statt out keyword verwenden;

%Vor%     
Kaspars Ozols 10.12.2013 09:15
quelle