User Tools

Site Tools


konvertierung_von_datentypen

Konvertierung von Datentypen

Hier sind die Möglichkeit zu Konvertierung von Datentypen aufgelistet.

Konvertierung von Strings

Zur Konvertierung eines Strings in ein chararray gibt es mehrere Möglichkeiten. Zunächt aber die Probleme die bei einer Konvertierung entstehen können. Der String ist im managed Speicher abgelegt und unterliegt damit dem Garbage Collector (GC). Somit ist nicht gewährleistet das der Zeiger den man einer unmanaged Funktion übergibt auch dauerhaft auf die richtige Stelle zeigt da der GC den Speicher aufräumen könnte und unseren String an eine andere Stelle verschieben würde. Um zu verhindern das unser Zeiger im nativen Bereich irgendwann ins Leere zeigt können wir entweder den String in den nativen Bereich kopieren und somit den GC umgehen oder wir nutzen einen pinned pointer um unseren String vom GC auszuschließen. Dieser hindert den GC daran den Inhalt auf den der Pointer zeigt zu verschieben oder gar zu löschen. Allerdings ist dies nur innerhalb einer Funktion möglich und somit auch nur innerhalb des Scopes der Funktion gültig. Hält die native Funktion den Pointer vor. Um beiu einem weiteren Aufruf wieder darauf zugreifen zu können. Wird dieser Zeiger ins Nirvana zeigen, da der GC den Pointer bei verlassen des Scopes wieder zum löschen frei gibt.

Konvertieren mit CString

CString erstellt ein Kopie des Strings und kann somit ohne Probleme von der nativen Funktion genutzt und auch länger benutzt werden, ohne das der GC eingreift.

void DoSomethingWithManageString(String^ managedString)
{
  CString ptrToManagedString(managedString);	
  functionWithWCharAsParameter(ptrToManagedString);
}

Konvertieren mittels pin_ptr

void DoSomethingWithManageString(String^ managedString)
{
  pin_ptr<const wchar_t> ptrToManagedString = PtrToStringChars(managedString);	
  functionWithWCharAsParameter(ptrToManagedString);
}

Konvertieren von Enums

public enum class myManagedEnum
	{
		Fall1 = 0,
        Fall2,
    Fall3,
    NochEinFall,
    EinGanzAndererFall,
	};
 
enum class myNativeEnum
	{
		Fall1 = 0,
        Fall2,
    Fall3,
    NochEinFall,
    EinGanzAndererFall,
	};
 
public ref class
{
   public:
     void convertMyEnums()
     {
        myManagedEnum mEnum;
        myNativeEnum nEnum;
        mEnum = statice_cast<mEnum>(nEnum);
        nEnum = statice_cast<nEnum>(mEnum);
     }
}
konvertierung_von_datentypen.txt · Last modified: 2014/02/13 14:52 by miguel_m