Aracılığıyla paylaş


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 CWinAppoluş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şlevine InitInstance ve sonlandırma kodunu ExitInstance 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 CWinAppsı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.

DLL Türleri