2011-10-21 20 views

cevap

31

Windows'ta, .dll dosyasını doğrudan – ile bağlantılandırmıyorsanız, beraberindeki .lib dosyasını kullanmalısınız. Bunu yapmak için Project -> Properties -> Configuration Properties -> Linker -> Additional Dependencies'a gidin ve .lib'inize bir sonraki satır olarak yol ekleyin.

Ayrıca .dll dosya %PATH% ortam değişkeni tarafından veya kopya Output Directory olduğunu içerdiği dizinde (varsayılan olarak, bu projenizin klasörünün altında Debug\Release olan), ya olduğundan emin olmak gerekir.

Eğer .lib dosyaya erişimi yoksa

bir alternatif böyle LoadLibrary ve GetProcAddress olarak çalışma zamanı kullanarak WINAPI fonksiyonları sırasında elle .dll yüklemektir.

+0

Ayrıca .h dosyalarından bahsettikleri yerleri gördüm. Bu süreç için onlara ihtiyacımız var mı? .lib dosyası dll için tüm bilgileri içerdiğinden, gerekli olmadıklarını düşünüyorum. – darkgaze

+0

@darkgaze Hala gerekli olduğunu düşünürdüm çünkü .h dosyaları genellikle tüm prototipleri, bildirimleri, sabitleri, makroları, vb içerir. –

19

Doğrudan bir DLL'ye karşı eklemez veya bağlantı oluşturmazsınız, DLL tarafından üretilen LIB'ye karşı bağlantı oluşturmazsınız. LIB, kodunuzdaki bir kitaplığı (statik bağlantı) veya DLL'ye (dinamik bağlantı) başvurmak için semboller ve diğer gerekli verileri sağlar.

Bir LIB'ye karşı bağlantı kurmak için, bunu proje Özellikler -> Bağlayıcı -> Giriş -> Ek Bağımlılıklar listesine eklemeniz gerekir. Burada tüm LIB dosyaları bağlantıda kullanılacaktır.

statik bağlama ile
#pragma comment(lib, "dll.lib") 

, kodun yürütülebilir dahildir ve hiçbir çalışma zamanı bağımlılıkları vardır: Ayrıca şöyle bir pragma kullanabilirsiniz. Dinamik bağlantı, eşleşen ad ve sembollere sahip bir DLL gerektirir: the search path (değil sadece yol veya sistem dizini).

+2

Statik bağlama hakkında: Visual Studio'nun dll'yi belirli bir dizinden inşa çıkışı (veya bağlantı)? – Marcel

+2

@Marcel Her proje ön inşa, post-inşa ve diğer çeşitli adımları sağlar (proje ayarlarını kontrol edin). Orada bir dosya kopyalama yapabilir, hatta tüm bir betiği çalıştırabilirsiniz (Bende, revizyon ID'lerinden bir başlık oluşturmak için önceden oluşturulmuş bir betikim var ve ön-inşada arttırma yapı numarası var, sonra dosyaları post içinde bir test kurulumuna kopyala). – ssube