Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
Managed etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Managed etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Ekim 2007 Pazar

Platform Invoke nedir ? (Platform Invocation Services)

unmanaged olarak yazılmış fonksiyonların managed ortamda çağırılıp çalıştırılabilmesidir. yani .NET dilleri içinde unmanaged olarak yazılmış bir fonksiyonun çalıştırılabilmesi olayıdır. Tam adı Platform Invocation Services'tir fakat Platform Invoke olarak geçer, birçok yerde de P/Invoke denir. .NET'in yetersiz veya yavaş kaldığı yerlerde hızır gibi imdadımıza yetişir.


[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MessageBox(int hWnd, String text, String caption, uint type);


yukarıdaki kod örneği user32.dll içindeki MessageBox fonksiyonunu managed kodumuzda (örnekte C#) kullanabilmemizi sağlar.

Kullanımı:

MessageBox(0, "heey, bilişim kulübü, ben user32.dll içinden geliyorum",
"Yabancı ama tanıdık bi yüz", 0);


Aşağıdaki kod da VB.NET örneği

Declare Auto Function MessageBox Lib "user32.dll" (ByVal hWnd As Integer, ByVal txt As String, _
ByVal caption As String, ByVal Typ As Integer) As Integer



Kaynak: bilisim-kulubu.com

Managed ve UnManaged KOD ne demektir?

Managed kod demek hafıza yönetimi(memeory management) yonetilen demek oluyor.Oluşturduğun değişkenlerin yok edilmesi işini kullandığın sistem(FrameWork, Programlama dili...) yapıyor demektir.

Örneğin:
SqlCommand cmd = new SqlCommand();
..
...
....
cmd.Dispose(); //işin bitti uçur bellekten..


Bunu kendin yaptın.Ama sen eğer x kadar süre kullanmazsan Çöp Toplayıcı(Garbage Collector) bunu senin yerine yapacaktı. Bunu senin yerine yapan bir sistemde yazılan kod MANAGED CODE(yönetilen kod) demektir.


UNMANAGED KOD(Yönetilmeyen Kod) ise tam tersidir.Yani bellek yonetimi senin tarafından yapılan, başkası tarafindan yonetilmeyen demek oluyor. Yukarıdaki örneğe göre, cmd.Dispose() işini daima senin yapman gereken kodlama.

Örneklemek gerekirse VC++ 6 programı unmanaged koddur. Çunku onda memory yonetimi (Allocation ve Deallocation lar objeleri delete le silme falan) kodcu tarafından yapılır.

Ancak .NET'te ve Java'daGC (Garbage collector - Çöp toplayıcı) vardır.

Garbage collector Nedir? Nedir bu GC ?
GC .NET te hafıza işlerini yoneten mekanizmadır ve Java bu işin öncüsüdür. Yani programının bellekt yonetimi onun tarafından yapılır. Bir obje yarattığında (new le) onun için bellekte bir alan açmak daha sonra bu obje ile işin bittiğinde ona artık herahangi bir referans kalmadığında onun Dispose edilmesi ve Finalize edilmesi gibi işlemleri yapar. Memoryde alan sıkıntısı olduğunda çalışıp yok edebileceği objeleri kaldırır. Bu nedenle her nesne için önce alloc sonrada işin bittiğinde delete demek zorunda kalmazsın.