Försöker få till en metod i C++/CLI som skall användas från C#, i C# vill jag att signaturen skall vara konstigt, är säker på att jag testat det (och såg den som ref int), men kanske användande programmet inte uppdaterade referenserna korrekt då eller nåt sånt.. hmm, när jag testar med riktig kod Nu spånar jag bara lite utan att ha kännedom om hur c++ rent kodmässigt gör med sina pekare... >Nu spånar jag bara lite utan att ha kännedom om hur c++ rent kodmässigt gör med sina pekare... Fixat det hela nu, verkar som om kompilatorn trodde jag försökte mej på att skriva MIDL kod när jag skrev <b>[out]</b> du bör undvika out parameterar och i stället använda returvärden. I normala fall jo kanske, men det är inte möjligt i detta fall pga. övriga omständigheter.out parameter
void Foo(int bar, out int baz);
men lyckas bara få till
void Foo(int bar, ref int baz);
så hur göra i C++/CLI för att få till out parametrar?
Sv:out parameter
Sv: out parameter
void GetConfigInfo([out]unsigned short% pConfBase, [out]unsigned short% pConfCount);
så går det inte alls, får alla möjliga skumma meddelanden om att out cannot be repeated, och can only appear on a data-pointer type
Sv:out parameter
Jag tror att det borde vara något i stil med:
1) Skicka in en pekare som pekar på en adress
2) På den adressen finns en pekare som du sedan kan peka om mot vad du vill, alternativt ett värde som du kan ändra
3) När funktionen är klar så är det bara att titta på den adress som den första pekaren pekade på, där kommer det antingen att finnas en till pekare eller ett värde.
Eftersom att short är en värdetyp så borde det vara så att du ska ta emot en pekare på en short. Sedan ändrar du värdet på det ställe där pekaren pekar. Den teorin skulle nog också kunna stämma med felmeddelandet tror jag.Sv: out parameter
Frågan var angående C++/CLI inte C++. (C++/CLI är ett .Net språk som har ungefär samma syntax som C++ men skiljer sig ganska mycket i övrigt)
Du har dock rätt i ditt resonemang: Jag glömde en "^" ovan
void foo([out] String^% bar);
(dvs man skickar in en referens '%' till ett ref objekt på heap '^')
Se här: http://www.winterdom.com/cppclifaq/archives/000421.htmlSv:out parameter
däremot om jag skrev
using namespace System::Runtime::InteropServices;
...
void GetConfigInfo([Out]unsigned short% pConfBase, [Out]unsigned short% pConfCount);
så funkade det hela som jag ville.
(dvs, med stora bokstäver, (System::Runtime::InteropServices::OutAttribute))
kanske kan hjälpa nån annan..
Sv: out parameter
Det get bättre prestanda och stämmer bättre med BCLs programmeringsmodell.Sv:out parameter