Jobbar med att generera wrappers för unmanaged c funktioner, och stöter på problem när den "omanagerade" (vad heter det egentligen?) tar en enumeration som parameter: Är denna kod till hjälp? Konverterar std-string till String* och tvärtom.konvertera enumerationstyper
void DoFoo(FooEnumeration foo);
där FooEnumeration är en unmanaged enumeration
enum FooEnumeration {
FOO,
BAR}
vill egentligen göra en wrapper som ser ut så här (där inparametern är en managed enumeration!)
void EnManagedKlass::Foo(enum class FooEnumeration foo) {
//här vill jag alltså kalla på void DoFoo(FooEnumeration foo);
//men hur konverterar jag från managed enumeration till unmanaged enumeration?
}
PS. använder .NET 2.0
Sv: konvertera enumerationstyper
string Converter::ManagedToString(String* managed)
{
string converted;
char *chars = (char*) Marshal::StringToHGlobalAnsi(managed).ToPointer();
converted = chars;
Marshal::FreeHGlobal(chars);
return converted;
}
String* Converter::StringToManaged(string unmanaged)
{
return Marshal::PtrToStringAnsi((int*) unmanaged.c_str());
}
String* Converter::IntToManaged(int unm)
{
string kontot;
stringstream sa;
sa<<unm;
sa>>kontot;
return Marshal::PtrToStringAnsi((int*) kontot.c_str());;
}
int Converter::ManagedToInt(String* managed)
{
int theInt;
string thePreInt;
stringstream sa;
thePreInt = ManagedToString(managed);
sa<<thePreInt.substr(0, 4);
sa>>theInt;
return theInt;
}
int Converter::ManagedToIntBig(String* managed)
{
int theInt, size;
string thePreInt;
stringstream sa;
thePreInt = ManagedToString(managed);
size = thePreInt.length();
sa<<thePreInt;
sa>>theInt;
return theInt;
}