Gegen Internetzensur
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
  • Flickr Photos

    www.flickr.com
16. Mrz
Fre

out und ref in C++/CLI

Ich musste gerade ein bisserl herumknobeln, wie man in C++/CLI einen Methodenparameter so markiert, dass er in anderen .NET-Sprachen, in meinem Fall C#, als “out” oder “ref” gekenzeichnet wird.

Möchte man nur einen klassischen ‘call by reference’-Fall erreichen, hier also einen Parameter, der sowohl Eingabe, als auch Ausgabewert sein kann, muss man ihn als “tracking reference” markieren. Am Beispiel String^:

C++/CLI [Show Plain Code]:
  1. public ref class Foo {
  2. public:
  3.     // c#: void Bar( ref String woo )
  4.     void Bar( String^% woo );
  5. }

Die entsprechende Signatur in C# wäre dann void Bar( ref String woo ).
Möchte man nun einen Parameter explizit als “out”, also ausschließlich zur Ausgabe, markieren, benötigt man zusätzlich das Attribut [Out] – dieses befindet sich allerdings freundlicherweise im Namespace

System::Runtime::InteropServices

vergraben.

Also

C++/CLI [Show Plain Code]:
  1. using namespace System::Runtime::InteropServices;
  2.  
  3. public ref class Foo {
  4. public:
  5.     // c#: void Bar( out String woo )
  6.     void Bar( [Out] String^% woo );
  7. }

Und alles ist, wie es sein soll. Falls man dennoch eine Fehlermeldung wie (C3763)

'retval' and 'out' can only appear on a data-pointer type

erhält, hat man “Out” ganz simpel – und falsch – in Kleinbuchstaben (“out”) geschrieben.

3 Antworten zu „out und ref in C++/CLI”

  1. #1~Andreas

    Besten Dank! Genau diese Info habe ich gesucht und hier gefunden.

  2. #2~DerWOK

    Super! Genau das hab ich grad gesucht ;-)

    Danke!

  3. #3~Jürgen

    Danke! Kurz und knapp genau das was ich suchte.

    Übrigens nettes Layout was du hier für deine Seite hast.