Aracılığıyla paylaş


TN057: MFC Bileşenlerini Yerelleştirme

Dekont

Aşağıdaki teknik not, çevrimiçi belgelere ilk kez eklendiğinden beri güncelleştirilmemiştir. Sonuç olarak, bazı yordamlar ve konular güncel olmayabilir veya yanlış olabilir. En son bilgiler için, çevrimiçi belge dizininde ilgilendiğiniz konuyu aramanız önerilir.

Bu not, bir uygulama veya OLE denetimi ya da MFC kullanan bir DLL ise bileşeninizi yerelleştirmek için kullanabileceğiniz bazı tasarım ve yordamları açıklar.

Genel Bakış

MFC kullanan bir bileşeni yerelleştirirken çözülmesi gereken iki sorun vardır. İlk olarak, dizeler, iletişim kutuları ve bileşeninize özgü diğer kaynaklar gibi kendi kaynaklarınızı yerelleştirmeniz gerekir. MFC kullanılarak oluşturulan bileşenlerin çoğu, MFC tarafından tanımlanan bir dizi kaynağı da içerir ve kullanır. Yerelleştirilmiş MFC kaynaklarını da sağlamanız gerekir. Neyse ki, MFC tarafından zaten çeşitli diller sağlanmıştır.

Ayrıca, bileşeniniz hedef ortamında (Avrupa veya DBCS özellikli ortam) çalışmaya hazır olmalıdır. Çoğunlukla bu, uygulamanızın yüksek bit kümesine sahip karakterleri doğru şekilde işlemesine ve çift bayt karakterli dizeleri işlemesine bağlıdır. MFC, bu ortamların her ikisi için de varsayılan olarak etkindir, böylece kurulum zamanında yalnızca farklı kaynaklara sahip tüm platformlarda kullanılan tek bir dünya çapında ikili dosyaya sahip olmak mümkündür.

Bileşeninizin Kaynaklarını Yerelleştirme

Uygulamanızı veya DLL'nizi yerelleştirmek için kaynakları hedef dille eşleşen kaynaklarla değiştirmek yeterlidir. Kendi kaynaklarınız için bu oldukça basittir: kaynakları kaynak düzenleyicisinde düzenleyin ve uygulamanızı oluşturun. Kodunuz düzgün yazılırsa, C++ kaynak kodunuzla sabit kodlanmış yerelleştirmek istediğiniz dize veya metin olmaz. Tüm yerelleştirme işlemleri yalnızca kaynakları değiştirerek gerçekleştirilebilir. Aslında, bileşeninizi yerelleştirilmiş bir sürüm sağlayanların tümü özgün kodun derlemesini bile içermeyecek şekilde uygulayabilirsiniz. Bu daha karmaşıktır, ancak buna değer ve MFC'nin kendisi için seçilen mekanizmadır. Exe veya DLL dosyasını kaynak düzenleyicisine yükleyip kaynakları doğrudan düzenleyerek bir uygulamayı yerelleştirmek de mümkündür. Mümkün olsa da, uygulamanızın her yeni sürümünü oluşturduğunuzda bu değişikliklerin yeniden uygulanmasını gerektirir.

Bunu önlemenin bir yolu, bazen uydu DLL olarak adlandırılan ayrı bir DLL'deki tüm kaynakları bulmaktır. Bu DLL daha sonra çalışma zamanında dinamik olarak yüklenir ve kaynaklar tüm kodunuzla birlikte ana modül yerine bu DLL'den yüklenir. MFC bu yaklaşımı doğrudan destekler. MYAPP.EXE adlı bir uygulamayı düşünün; tüm kaynakları MYRES.DLL adlı bir DLL'de bulunabilir. Uygulamada, bu DLL'yi yüklemek ve MFC'nin InitInstance bu konumdan kaynak yüklemesine neden olmak için aşağıdakileri gerçekleştirir:

CMyApp::InitInstance()
{
    // one of the first things in the init code
    HINSTANCE hInst = LoadLibrary("myres.dll");

    if (hInst != NULL)
        AfxSetResourceHandle(hInst);

    // other initialization code would follow
    // ...
}

Bundan sonra MFC, myapp.exe yerine bu DLL'den kaynak yükler. Ancak tüm kaynakların bu DLL'de mevcut olması gerekir; MFC, belirli bir kaynağı ararken uygulamanın örneğinde arama gerçekleştirmez. Bu teknik, normal MFC DLL'lerinin yanı sıra OLE Denetimleri için de aynı ölçüde geçerlidir. Kurulum programınız, kullanıcının hangi kaynak yerel ayarının beğenildiğine bağlı olarak MYRES.DLL dosyasının uygun sürümünü kopyalar.

Yalnızca kaynak DLL'sini oluşturmak nispeten kolaydır. BIR DLL projesi oluşturup öğesini ekleyin. RC dosyasını ekleyin ve gerekli kaynakları ekleyin. Bu tekniği kullanmayan mevcut bir projeniz varsa, bu projedeki kaynakları kopyalayabilirsiniz. Kaynak dosyasını projeye ekledikten sonra projeyi oluşturmaya neredeyse hazırsınız. Yapmanız gereken tek şey bağlayıcı seçeneklerini /NOENTRY içerecek şekilde ayarlamaktır. Bu, bağlayıcıya DLL'nin giriş noktası olmadığını bildirir. Kodu olmadığından, giriş noktası yoktur.

Dekont

Visual C++ 4.0 ve sonraki sürümlerdeki kaynak düzenleyicisi, başına birden çok dili destekler. RC dosyası. Bu, yerelleştirmenizi tek bir projede yönetmenizi çok kolaylaştırabilir. Her dil için kaynaklar, kaynak düzenleyicisi tarafından oluşturulan önişlemci yönergeleri tarafından denetlenmektedir.

Sağlanan MFC Yerelleştirilmiş Kaynaklarını Kullanma

Oluşturduğunuz herhangi bir MFC uygulaması MFC'den iki şeyi yeniden kullanır: kod ve kaynaklar. Başka bir deyişle, MFC'nin çeşitli hata iletileri, yerleşik iletişim kutuları ve MFC sınıfları tarafından kullanılan diğer kaynakları vardır. Uygulamanızı tamamen yerelleştirmek için yalnızca uygulamanızın kaynaklarını değil, aynı zamanda doğrudan MFC'den gelen kaynakları da yerelleştirmeniz gerekir. MFC otomatik olarak bir dizi farklı dil kaynak dosyası sağlar, böylece hedeflediğiniz dil MFC'nin zaten desteklediği dillerden biriyse, bu yerelleştirilmiş kaynakları kullandığınızdan emin olmanız yeterlidir.

Bu yazıdan itibaren MFC Çince, Almanca, İspanyolca, Fransızca, İtalyanca, Japonca ve Korece'yi destekler. Bu yerelleştirilmiş sürümleri içeren dosyalar MFC\INCLUDE\L.* ('L' yerelleştirilmiş) dizinlerde yer alır. Örneğin, Almanca dosyalar MFC\INCLUDE\L.DEU içindedir. Uygulamanızın MFC\INCLUDE içinde bulunan dosyalar yerine bu RC dosyalarını kullanmasına neden olmak için, RC komut satırınıza bir /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU ekleyin (bu yalnızca bir örnektir; seçtiğiniz yerel ayarı ve Visual C++'ı yüklediğiniz dizini değiştirmeniz gerekir).

Uygulamanız MFC ile statik olarak bağlantı oluşturuyorsa yukarıdaki yönergeler çalışır. Çoğu uygulama dinamik olarak bağlanır (çünkü appwizard varsayılanı budur). Bu senaryoda, yalnızca kod dinamik olarak bağlantılı değildir, kaynaklar da birbirine bağlıdır. Sonuç olarak, uygulamanızdaki kaynaklarınızı yerelleştirebilirsiniz, ancak MFC uygulama kaynakları MFC7x.DLL'den (veya sonraki bir sürümden) veya varsa MFC7xLOC.DLL'den yüklenmeye devam eder. Buna iki farklı açıdan yaklaşabilirsiniz.

Daha karmaşık bir yaklaşım, yerelleştirilmiş MFC7xLOC.DLL'lerden birini (Almanca için MFC7xDEU, İspanyolca için MFC7xESP.DLL vb.) veya daha sonraki bir sürümü göndermek ve kullanıcı uygulamanızı yüklediğinde uygun MFC7xLOC.DLL dosyasını sistem dizinine yüklemektir. Bu, hem geliştirici hem de son kullanıcı için çok karmaşık olabilir ve bu nedenle önerilmez. Bu teknik ve uyarıları hakkında daha fazla bilgi için bkz . Teknik Not 56 .

En basit ve en güvenli yaklaşım, yerelleştirilmiş MFC kaynaklarını uygulamanızın veya DLL'nizin kendisine (veya kullanıyorsanız uydu DLL'sine) dahil etmektir. Bu, MFC7xLOC.DLL dosyasını düzgün yükleme sorunlarını önler. Bunu yapmak için yukarıda verilen statik durum için aynı yönergeleri izleyin (RC komut satırını yerelleştirilmiş kaynakları işaret etmek üzere düzgün şekilde ayarlama), ancak AppWizard tarafından eklenen tanımlamayı /D_AFXDLL da kaldırmanız gerekir. Tanımlandığında /D_AFXDLL , AFXRES. H (ve diğer MFC RC dosyaları) aslında herhangi bir kaynak tanımlamaz (bunun yerine MFC DLL'lerinden çekilecekleri için).

Ayrıca bkz.

Sayıya Göre Teknik Notlar
Kategoriye Göre Teknik Notlar