Coding with Titans

so breaking things happens constantly, but never on purpose

Natywne API a .NET - P/Invoke - część II - Wskaźniki

Nieprawdą jest, że na platformie .NET nie istnieją wskaźniki. W C# w sekcji unsafe, możemy spokojnie mieszać “typowy” kod .NET z operacjami na wskaźnikach. Tu jednak uwaga: sekcje unsafe muszą być propagowane w górę, a to oznacza, że i metoda, w której są zawarte, musi być również opisana jako niebezpieczna (czasem i cała klasa), oraz co dużo ważniejsze - podczas kompilacji modułu (assembly) wymagany jest przełącznik “/unsafe", zezwalający jawnie na używanie niebezpiecznych operacji na wskaźnikach. Read more →

Konwencje wywołań

Sposób wywoływania funkcji w programach pisanych w C/C++, Pascalu, assemblerze (rozumianych szeroko jako języki i kod niezarządzany) odgrywa niebagatelne znaczenie. Aby dwie funkcje - wywołująca i wywoływana - mogły się ze sobą dogadać, muszą wcześniej uzgodnić kilka drobnych acz istotnych szczegółów. Należą do nich: sposób, w jaki przekazywane będą argumenty (np. poprzez stos, rejestry lub mieszając oba) sposób, w jaki argumenty są numerowane (od prawej, czy od lewej strony) sposób udekorowania nazwy funkcji (poprzez dodanie przyrostków, przedrostków lub całkowite wygenerowanie nowej nazwy, gwarantujące unikatowość, gdy funkcja jest wielkorotnie przeładowana) czy występuje stała, czy zmienna liczba argumentów (a tym samym, która ze stron będzie odpowiedzialna za posprzątanie) czy występuje wywołanie funkcji globalnej (statycznej) lub metody klasy (C++). Read more →