Sayfayı Yazdır | Pencereyi Kapat

c,c++ kodu .net üzerine reference yapmak

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: C# & ASP.NET
Forum Tanımlaması: C# ve ASP.NET ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=2374
Tarih: 28.Mart.2024 Saat 17:55


Konu: c,c++ kodu .net üzerine reference yapmak
Mesajı Yazan: aziz.alkurt
Konu: c,c++ kodu .net üzerine reference yapmak
Mesaj Tarihi: 17.Haziran.2012 Saat 17:23
Elimizde kod yüklü ağır bir c veya c++ kodu var ve bunu .net üzerinde kullanmak istiyoruz.
       DLL export-import ile basit şekilde geçiştirilebilir. Fakat program multithread çalışabilir mi? büyük oranında çakar. Küçük  ihtimal ise dll yazan kişinin bunun bilincide olup static varriableler kullanmıyarak, hatta prosedur için pointer al, aldığın poiner değerini değiştir mantığı kullanarak, birde dispose problemi yaşamamak için kullanılan varriablelerin .net platformu içerisinde yaratılması.  Neden? Çünkü c,c++ kodlamalarında otomatik garbage collector yani kullanılmayan nesnelerin ramdan silinmesini ve bu bağlantıları heranı takipte olan bir servise sahip değildir. Aksi taktirde karşılaşacağınız hata, hataların en kötüsü olan : "AccessViolationException". Bu hata için bilgilendireyim try-catch yemez. Çünkü hatayı OS verir, çalışan sistem OS üzerine zarar verileceği düşünülerek sonlandırılır. Kullandığınız OS bunu da yapmaya yeteneksiz ise mavi ekranla karşılaşabilirsiniz.
      Bildiğimiz gibi Microsoft firması uzun yıllardır c ve c++ üzerine çaba harcıyor. Hatta çoğu kütüphanelerinin kendine ait olan bir compiler sahibi. Bunun dışında kötü tarafı bazı kütühaneleri tanımaması. .Net platformu ortada yokken microsoftun neden bu compiler üzerinde çalıştığı merak konusuydu. Üstelik piyasada açık kaynaklı daha iyi derleyiciler varken. .net in sonraki sürümlerinde gelen .net C++ yani CLR (Common Language Runtime) destekli c++ derleyicisi, .net platformunun ne kadar güçlü olduğunu ilan etti.
     Visual Studio içerisinde C++ projesi yarattığın zaman "Common Properties" bölümünde "Common Runtime Language Support" bölümünü açarsanız proje artık .net C++ olmuş oluyor ve hem .net kütüphanelerini projeye dahil edebilme hem normal c++ projelerini veya ".lib" uzantılı api lerini hende bu projeyi dll haline getirdikten sonra .net projelerinde referans olarak ekleme şansınız oluyor. Elinizdeki kod yükü ağır c++ projelerini de isterseniz bu oluşturduğunuz .net c++ projesine ister proje halinde, isterseniz "C/C++"->"General" -> "Resolve #using Reference" listesine ekliyerek (derlenmiş ".lib" uzantılarını) .net c++ projesi ile bu iki proje (kod yükü ağır c++ projesi ve C#) arasında bir köprü yazmanıza imkan sağlanıyor.
Fakat bununda tabi şartları var. Öncelikle C# projesine bu yarattığımız .net c++ ile yazılış dll eklemek isersek projeyi "Client Profile" modundan çıkarmamız gerekiyor. İkincisi c++ kodu hangi platform için yazlımışsa projeyi ona almak gerekiyor.(32 bit-> x86, 64 bit -> x64)  c++ projesini ".Net 4" platformunda çalıştırmak istiyorsak .net c++ kodunu "v100" yani Visual Studio 2010 üzeride derlememiz gerekiyor. En son olarak da yazılan yazılımın başka makinada çalışması için "Visual C++ 2005-2008-2010" (hangi patformda derlenmişse ve x86-x64 mü olduğu) kurulması gerekiyor.




Sayfayı Yazdır | Pencereyi Kapat