PDA

Tam Sürümünü Görmek İçin : Windows "Dynamic Linking"


ortug
20/04/2008, 14:02
Arkadaşlar hazırladığımız sistem giderek büyümekte ve biz de daha modüler bir yapıya geçmek istiyoruz. Ortamımız Visual Studio 6.0 ve C++.
Yapmak istediğimi bir örnek vererek açıklamak daha kolay olacak. D isimli bir kütüphane projemiz olsun. Bu proje içinde D sınıfımız bulunuyor. M isimli başka bir çalıştırılabilir projemiz var. Bu projede D sınıfına ihtiyacımız var.
Benim gördüğümde static link yaparsak sadece M.exe yaratılıyor, D projesine ait kodlarıda M içine gömüyor.
Eğer dynamic link yaparsak, D projesinin kodlanmasında ve M projesinden D sınıfının çağrılması için extra effor sart etmek gerekecek. D projesinde dışarıya D sınıfından nesne döndüren bir fonksiyon yazılması gerekecek. Ayrıca M projesinde D sınıfında nesne yaratmak static linking'e göre daha zor olacak.
Benim tam olarak istediğim kodlama işlemlerini static linking'deki gibi kolay bir şekilde halletmek. Ayrıca kütüphane kodlarını ayrı bir dll'de tutmak.


hgedek
21/04/2008, 14:11
Soruyu tam anlamadım.Açıkçası dll kullanıp statik teki gibimi olsun???

Akın Öcal
21/04/2008, 20:49
Neden extra bir efor sarfetmek gerek ? D modülünde , D sınıf deklarasyonunda "__declspec(dllexport) " kullandıktan sonra dis dünya icin kullanilabilir olacak zaten , M projesinde ise
compile time icin D sinifinin headeri da gerekecek tabi , ayni static link olayindaki gibi kodlamaya devam edebileceksiniz.

ortug
22/04/2008, 00:30
Neden extra bir efor sarfetmek gerek ? D modülünde , D sınıf deklarasyonunda "__declspec(dllexport) " kullandıktan sonra dis dünya icin kullanilabilir olacak zaten , M projesinde ise
compile time icin D sinifinin headeri da gerekecek tabi , ayni static link olayindaki gibi kodlamaya devam edebileceksiniz.

Evet haklıymışsın. Ben dynamic link'ing sadece LoadLibrary ile sadece run-time'da oluyor sanmıştım. Ondan kodlaması için extra efor öngörüyordum.
Load-Time Dynamic Linking diye bir olay daha varmış.

Cevabınız için teşekkürler.

Bakmak isteyen arkadaşlar için örnek olarak yarattığım VS 6.0 projesi de buraya ekliyorum.