Statik Olarak MFC'ye Bağlı Normal MFC DLL'leri
MFC'ye statik olarak bağlı normal MFC DLL'si, MFC'yi dahili olarak kullanan bir DLL'dir ve DLL'deki dışarı aktarılan işlevler MFC veya MFC olmayan yürütülebilir dosyalar tarafından çağrılabilir. Adından da açıklandığı gibi, bu tür DLL'ler MFC'nin statik bağlantı kitaplığı sürümü kullanılarak oluşturulur. İşlevler genellikle standart C arabirimi kullanılarak normal bir MFC DLL'den dışarı aktarılır. Normal bir MFC DLL yazma, derleme ve kullanma örneği için örnek DLLScreenCap dosyasına bakın.
USRDLL teriminin artık Visual C++ belgelerinde kullanılmadığını unutmayın. MFC'ye statik olarak bağlı normal MFC DLL'leri, eski USRDLL ile aynı özelliklere sahiptir.
MFC'ye statik olarak bağlı normal bir MFC DLL'sinin aşağıdaki özellikleri vardır:
İstemci yürütülebilir dosyası DLL'lerin kullanımını destekleyen herhangi bir dilde yazılabilir (C, C++, Pascal, Visual Basic vb.); MFC uygulaması olması gerekmez.
DLL, uygulamalar tarafından kullanılan aynı MFC statik bağlantı kitaplıklarına bağlanabilir. ARTıK DLL'ler için statik bağlantı kitaplıklarının ayrı bir sürümü yoktur.
MFC'nin 4.0 sürümünden önce, USRDLL'ler MFC'ye statik olarak bağlı normal MFC DLL'leri ile aynı işlevsellik türünü sağladı. Visual C++ sürüm 4.0 itibarıyla USRDLL terimi kullanım dışıdır.
Statik olarak MFC'ye bağlı normal bir MFC DLL'sinin gereksinimleri şunlardır:
Bu dll türü, öğesinden türetilen bir sınıfın örneğini
CWinApp
oluşturmalıdır.Bu DLL türü MFC tarafından sağlanan öğesini
DllMain
kullanır. Dll'ye özgü tüm başlatma kodunu üye işlevineInitInstance
ve sonlandırma kodunuExitInstance
normal bir MFC uygulamasında olduğu gibi yerleştirin.USRDLL terimi eski olsa da, derleyici komut satırında "_USRDLL" tanımlamanız gerekir. Bu tanım, MFC üst bilgi dosyalarından hangi bildirimlerin alındığını belirler.
normal MFC DLL'leri, MFC uygulaması gibi - türetilmiş bir CWinApp
sınıfa ve bu uygulama sınıfının tek bir nesnesine sahip olmalıdır. Ancak, CWinApp
dll nesnesinin ana ileti pompası yok, bir uygulamanın nesnesi gibi CWinApp
.
Uygulamanın ana ileti pompasına CWinApp::Run
sahip olması nedeniyle mekanizmanın dll için geçerli olmadığını unutmayın. DLL, modeless iletişim kutularını açarsa veya kendi ana çerçeve penceresine sahipse, uygulamanın ana ileti pompası DLL tarafından dışarı aktarılan ve dll'nin uygulama nesnesinin üye işlevini çağıran bir yordamı çağırmalıdır CWinApp::PreTranslateMessage
.
Bu işlevin bir örneği için bkz. DLLScreenCap örneği.
Simgeler genellikle standart C arabirimi kullanılarak normal bir MFC DLL'den dışarı aktarılır. Normal MFC DLL'sinden dışarı aktarılan bir işlevin bildirimi aşağıdakine benzer olacaktır:
extern "C" __declspec(dllexport) MyExportedFunction( );
Normal bir MFC DLL içindeki tüm bellek ayırmaları DLL içinde kalmalıdır; DLL, aşağıdakilerden herhangi birini çağıran yürütülebilir dosyaya geçmemeli veya bu yürütülebilir dosyadan almamalıdır:
MFC nesnelerinin işaretçileri
MFC tarafından ayrılan belleğe yönelik işaretçiler
Yukarıdakilerden herhangi birini yapmanız gerekiyorsa veya çağıran yürütülebilir dosya ile DLL arasında MFC türetilmiş nesneleri geçirmeniz gerekiyorsa, bir MFC uzantısı DLL'i oluşturmanız gerekir.
C çalışma zamanı kitaplıkları tarafından bir uygulama ile DLL arasında ayrılan işaretçileri belleğe geçirmek, yalnızca verilerin bir kopyasını oluşturursanız güvenlidir. Bu işaretçileri silmemeli, yeniden boyutlandırmamalı veya belleğin bir kopyasını oluşturmadan kullanmamalısınız.
MFC'ye statik olarak bağlı dll de paylaşılan MFC DLL'lerine dinamik olarak bağlanamaz. MFC'ye statik olarak bağlı bir DLL, diğer DLL'ler gibi bir uygulamaya dinamik olarak bağlıdır; uygulamalar, diğer DLL'ler gibi buna bağlanır.
Standart MFC statik bağlantı kitaplıkları, MFC DLL'leri için Adlandırma Kuralları'nda açıklanan kurala göre adlandırılır. Ancak, MFC sürüm 3.0 ve üzeri ile artık bağlayıcıya bağlanmak istediğiniz MFC kitaplığının sürümünü el ile belirtmek gerekmez. Bunun yerine MFC üst bilgi dosyaları, _DEBUG veya _UNICODE gibi ön işlemci tanımlarına göre bağlanılacak MFC kitaplığının doğru sürümünü otomatik olarak belirler. MFC üst bilgi dosyaları, bağlayıcıya MFC kitaplığının belirli bir sürümünde bağlanmasını belirten /DEFAULTLIB yönergelerini ekler.
Ne yapmak istiyorsunuz?
Ne hakkında daha fazla bilgi edinmek istiyorsunuz?
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin