kurze fragen zum übergang von c++ in c#
-
da ich gezwungen bin von c++ auf c# zu wechseln, möchte ich hier ein paar kurze fragen stellen welche sich mir bis jetzt noch nich erschlossen haben:
-in c/c++ band man externe librarys mit #include ein. bei c# macht man das mit using, aber wie binde ich externe libs (sdl,opengl?) ein?
-was sind die äquivalente zu std::vector und std::map in c#?
-
TravisG schrieb:
[..]
-in c/c++ band man externe librarys mit #include ein. bei c# macht man das mit using, aber wie binde ich externe libs (sdl,opengl?) ein?Idr. entwickelt man C# nur in einer IDE. Dort klickst du auf: References -> Add Reference und suchst dir dort deine .NET / COM Dll aus.
Edit: Für OpenGL in .NET such mal nach "TAO"TravisG schrieb:
[..]
-was sind die äquivalente zu std::vector und std::map in c#?1.: ArrayList
2.: Dictionary
-
Hi,
mit "using" werden nur andere Assemblies eingebunden (keine DLLs).
Um DLLs einzubinden und dessen Funktionen zu nutzen, mußt du die DLL als Referenz deinem Projekt hinzufügen.Dann benötigst du noch eine Wrapper-Klasse, in welcher du die DLL-Befehle zur Verfügung stellst.
Hier ein Beispiel, um die WinAPI-Funktion "SendMessage" aus der user32.dll einzubinden:[DllImport("user32.dll")] static extern int SendMessage (IntPtr hWnd, int wMsg, IntPtr wParam, int lParam);
Für deine 2. Frage würde ich gerne wissen, mit welcher C# bzw. .NET Version du arbeitest?
Ab 2.0 gibt es sogenannte "Generics", welche typsichere Containerklassen sind (ähnlich wie std::vector, std::list, std::map etc).
In 1.1 kannst du die .NET-Klassen aus dem System.Collections Namespace nutzen, z.B. ArrayList, Hashtable und SortedList, welche beliebige Objekte speichern (d.h. den richtigen Typ mußt du dann beim Auslesen casten)
-
TravisG schrieb:
-in c/c++ band man externe librarys mit #include ein. bei c# macht man das mit using, aber wie binde ich externe libs (sdl,opengl?) ein?
Du bindest libs in C# nicht mit using ein. Wenn du C++ kannst, dann sollte dir bekannt sein, was using macht - in C# ist da nichts anders.
Du bindest libs per Compiler-Schalter ein. In C++ ist es ein Parameter zum Linker, in C# wird nur compiliert und nicht gelinkt, deshalb ist es ein Parameter an deinen Compiler. Includen dient in C++ nur dazu, die Prototypen bekannt zu machen, in C# existiert ein solcher Mechanismus nicht, der Compiler-Schalter allein reicht. Wenn du eine IDE benutzt, bietet sie in der Regel ein GUI, mit dem man die externen libs einstellen kann.
-was sind die äquivalente zu std::vector und std::map in c#?
System.Collections.Generic.List<T> und System.Collections.Generic.SortedDictionary<K, V>. Es gibt auch ein nicht sortiertes Dictionary<K, V>, mit schnellerem Lookup.
-
ich arbeite mit visual studio 2005 (.NET 2.0)
danke für die antworten, mehr gibts eigentlich nich zu fragen