Marshallingu do pamięci niezarządzanej" bo z takim się spotkałem a nie rozumiem terminu
jest to automatyczna konwersja typów danych i struktur z nieokreślonej bliżej postaci używanej wewnętrznie przez .NET na ściśle zdefiniowaną postać do wykorzystania przez kod niezarządzany - i odwrotnie.
Wspomniany już string w C# ma swoją wewnętrzną postać, którą jest zapis w kodowaniu UTF-16 (i wcale nie musi być zakończony znakiem zerowym). jeśli funkcja w C++ przyjmuje char*
, to w C# trzeba stringa przekonwertować, i marshaller może to zrobić automatycznie przy wywołaniu funkcji natywnej, a nawet przekonwertować z powrotem wartość zwracaną przez funkcję. wygląda to tak jakby ceszarpowy string był tym samym co char*
w C (bo przecież wywołanie funkcji działa...) ale tak naprawdę mieliśmy do czynienia z automatyczną konwersją tam i z powrotem.
podobnie bool
w C# ma jeden bajt (0 - fałsz, 1 - prawda) ale w WinAPI ma cztery bajty (0 - fałsz, !=0 - prawda). tym też może się zająć marshaller, tak że w C# przesyłasz i odbierasz z funkcji WinAPI zwykłego bool
a i nie przejmujesz się tym niuansem.