A következő címkéjű bejegyzések mutatása: unity. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: unity. Összes bejegyzés megjelenítése

2015. szeptember 18., péntek

MONO és a lezáró nulla

Gyakori feladat, hogy egy .NET C# NetworkStreamből kell kiolvasni a benne rejlő adatot a NetworkStream.Read(byte[] buffer, int offset, int size):int metódussal.

Az alábbi linken van hozzá egy jó módszer, miként célszerű használni:
https://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.dataavailable(v=vs.110).aspx

Fontos odafigyelni a Read hívásánál, hogy a visszatérési értékben kapjuk meg, hogy hány bájt volt a ténylegesen kiolvasott adat. Ne akarjunk a pufferből annál több elemet kiolvasni, a stringgé alakításkor a többi karakter a '\0' értéket fogja felvenni.

Ha mégis megfeledkeznénk erről és a teljes puffer tartalmát használjuk, akkor sem fog hibát dobni. Viszont létezik olyan .NET C# implementáció, mint a MONO, amiben a '\0' a null-terminator, azaz a stringet "lezáró nulla", emiatt pedig mindent eldob, ami utána van.

Ez a viselkedés olyan értelmetlennek tűnő szituációkat tud teremteni, mint hogy az így előállított stringhez a konkatenációval nem lehet semmit sem hozzáfűzni, és még hibát sem dob.

Bővebben a C++ lezáró nulla karakterről:
https://msdn.microsoft.com/en-us/library/69ze775t.aspx

2012. július 25., szerda

Generikus típusok és Unity

Lassan egy napja szívok azzal, hogy a Unity-t nem tudom bekonfigurálni, mert mindig más-más hibaüzenetet dobál.

A legtöbbször azt az általános "The given assembly name or codebase was invalid" hibát dobta, de csak egy bizonyos assembly-nél és típusnál. Minden fórum ugyanazt mondja, 100% hogy nincs ott a dll, vagy el van írva a neve, vagy nem jó a namespace, vagy meg kell adni a publikkeytoken-t is... 

Általában tényleg ez a probléma, de a Fusion Log Viewer semmilyen assembly binding hibát nem mutatott. Ebből ugye következik, hogy a codebase invalid. Hogy ez mit jelent, hát, nekem nem sokat mondott. Mint kiderült, a unity konfig xml-jében a sokezer kipróbált kombináció közül egyik sem volt jó a típus mapping regisztrálásra, mert generikus volt a típus, és én  " ` " jel helyett a " ' " jelet használtam a szintakszisban (de csak mituán nagy nehezen megtaláltam, hogy generikus interface-ek meg osztályok typusát hogy kell beregisztrálni). 
Hogy miről beszélek, ez a blog post leírja (és egyben kifejezetten jó útmutató erre):

Working With Generic Types In Unity Configuration Section

2010. június 24., csütörtök

Enterprise Library Unity

Ha Unity részt használsz egy projekten (dinamikus betöltés, pl a Prism is használja), akkor ne szegd meg azt az elméleti szabályt, hogy a konstruktorban ne legyen logika, mert ha van, és az hibás (exception keletkezik), akkor a unity dinamikus assembly betöltő része elnyeli az exception-t, helyette deadlock-ba kerül.

1. Konstruktorba nincs logika,
2. Unity elnyomja a konstruktorban lévő exception-t, és deadlockba is zavarhatod, ha ügyes vagy.