Aracılığıyla paylaş


TN035: Visual C++ ile birden çok kaynak dosyası ve üst bilgi dosyası kullanma

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, Visual C++ kaynak düzenleyicisinin tek bir projede paylaşılan veya birden çok projede paylaşılan birden çok kaynak dosyasını ve üst bilgi dosyasını nasıl desteklediğini ve bu desteklerden nasıl yararlanabileceğinizi açıklar. Bu not şu soruları yanıtlar:

  • Bir projeyi ne zaman birden çok kaynak dosyası ve/veya üst bilgi dosyası olarak bölmek isteyebilirsiniz ve bunu nasıl yapabilirsiniz?

  • Ortak üst bilgi .H dosyasını iki .RC dosya arasında nasıl paylaşabilirsiniz?

  • Proje kaynaklarını birden çok .RC dosyaya nasıl bölersiniz?

  • , .CPPve dosyaları arasındaki .RCderleme bağımlılıklarını (ve .H araçları) nasıl yönetirsiniz?

Projenize ek bir kaynak dosyası eklerseniz ClassWizard'ın eklenen dosyadaki kaynakları tanımayacağını unutmayın.

Bu not, yukarıdaki soruları aşağıdaki gibi yanıtlamak için yapılandırılmıştır:

  • Visual C++'ın kaynak dosyalarını ve üst bilgi dosyalarını nasıl yönettiğine genel bakış, Visual C++ içindeki Kaynak Kümesi İçerir komutunun aynı projede birden çok kaynak dosyası ve üst bilgi dosyası kullanmanıza nasıl olanak sağladığına ilişkin bir genel bakış sağlar.

  • AppWizard tarafından oluşturulan .RC ve .H Dosyalar analizi, AppWizard tarafından oluşturulan bir uygulama tarafından kullanılan birden çok kaynak ve üst bilgi dosyasını arar. Bu dosyalar, projenize eklemek isteyebileceğiniz ek kaynak dosyaları ve üst bilgi dosyaları için iyi bir model görevi görür.

  • Ek üst bilgi dosyaları dahil etmek, birden çok üst bilgi dosyasını nereye eklemek isteyebileceğinizi açıklar ve bunun nasıl yapılacağının ayrıntılarını sağlar.

  • Üst bilgi dosyasını iki .RC dosya arasında paylaşmak, bir üst bilgi dosyasını farklı projelerdeki veya belki de aynı projedeki birden çok .RC dosya arasında nasıl paylaşabileceğinizi gösterir.

  • Aynı projede birden çok kaynak dosyası kullanmak, projenizi nerede birden çok .RC dosyaya bölmek isteyebileceğinizi açıklar ve bunun nasıl yapılacağının ayrıntılarını sağlar.

  • Düzenlenemeyen Visual C++ dosyalarının uygulanması, Visual C++ uygulamasının özel kaynağı düzenlemediğinden ve istemeden yeniden biçimlendirmediğinden nasıl emin olabileceğinizi açıklar.

  • Birden çok Visual C++düzenlemeli .RC dosya tarafından paylaşılan simgelerin yönetilmesi, aynı simgelerin birden çok .RC dosyada nasıl paylaşıldığı ve yinelenen kimlik sayısal değerlerinin atanmasının nasıl önlendiği açıklanır.

  • , ve dosyaları arasındaki .RCbağımlılıkları yönetmek, Visual C++ uygulamasının kaynak sembol dosyalarına bağımlı dosyaları gereksiz şekilde yeniden derlemekten .CPP nasıl .H kaçındığını açıklar. .CPP

  • Visual C++'ın Küme İçerenleri Yönetme Bilgileri, Visual C++'ın bir .RC dosya tarafından eklenen birden çok (iç içe) .RC dosyayı ve birden çok üst bilgi dosyasını nasıl takip ettiği hakkında teknik ayrıntılar sağlar.

Visual C++'ın kaynak dosyalarını ve üst bilgi dosyalarını yönetme şekline genel bakış

Visual C++ tek .RC bir kaynak dosyasını ve buna karşılık gelen .H üst bilgi dosyasını sıkı bir şekilde bağlanmış bir dosya çifti olarak yönetir. Bir .RC dosyadaki kaynakları düzenleyip kaydettiğinizde, ilgili .H dosyadaki simgeleri dolaylı olarak düzenler ve kaydedersiniz. Aynı anda birden çok .RC dosya açıp düzenleyebilmenize rağmen (Visual C++'ın MDI kullanıcı arabirimini kullanarak), belirli .RC bir dosya için tam olarak karşılık gelen bir üst bilgi dosyasını dolaylı olarak düzenlersiniz.

Kaynak Görünümü'nde Kaynak İçeriği iletişim kutusu

Kaynak İçerir'e erişmek için Kaynak Görünümü'nüaçın, ardından dosyaya sağ tıklayın ve Kaynak İçeriği'ni .RCseçin.

Simge Üst Bilgi Dosyası

Varsayılan olarak, Visual C++ kaynak dosyasının RESOURCE.Hadından bağımsız olarak her zaman ilgili üst bilgi dosyasını (örneğin, MYAPP.RC) adlandırın. Visual C++'daki Kaynak İçeriği iletişim kutusundaki Simge Üst Bilgi Dosyası: bölümü, bu üst bilgi dosyasının adını değiştirmenize olanak tanır. Bölümün düzenleme kutusuna yeni bir dosya adı girin.

Dekont

dosyayla aynı dizinde bulunmayan kaynak dosyalarının .RC düzgün okunabilmesi için escaped-'\' ile göreli bir yol eklemesi gerekir.

Salt Okunur Sembol Yönergeleri

Visual C++ belirli .RC bir dosya için yalnızca bir üst bilgi dosyasını düzenlese de, Visual C++ ek salt okunur üst bilgi dosyalarında tanımlanan sembollere başvuruları destekler. Kaynak İçeriği iletişim kutusundaki Salt Okunur Simge Yönergeleri: bölümü, herhangi bir sayıda ek salt okunur üst bilgi dosyasını Salt Okunur Simge Yönergeleri olarak belirtmenize olanak tanır. "Salt okunur" kısıtlaması, dosyaya .RC yeni bir kaynak eklediğinizde salt okunur üst bilgi dosyasında tanımlanan bir simgeyi kullanabileceğiniz anlamına gelir. Ancak, kaynağı silerseniz, simge salt okunur üst bilgi dosyasında tanımlanmaya devam eder. Salt okunur bir simgeye atanan sayısal değeri değiştiremezsiniz.

Derleme Zamanı Yönergeleri

Visual C++, bir dosyanın yönergesi #include kullanılarak başka bir .RC dosyaya dahil edildiği kaynak dosyalarının iç içe yerleştirmesini de destekler. Visual C++ kullanarak belirli .RC bir dosyayı düzenlediğinizde, eklenen dosyalardaki kaynaklar görünmez. Ancak dosyayı derlediğinizde .RC , eklenen dosyalar da derlenir. Kaynak İçerenler iletişim kutusundaki Derleme Zamanı Yönergeleri: bölümü, Derleme Zamanı Yönergeleri olarak eklenecek herhangi bir sayıda .RC dosya belirtmenize olanak tanır.

Visual C++'a, Derleme Zamanı Yönergesi olarak* belirtilmemiş başka bir .RC dosya içeren bir .RC dosyayı okursanız ne olacağını unutmayın. Bu durum, daha önce bir metin düzenleyicisiyle el ile bakımını yaptığınız bir .RC dosyayı Visual C++'a getirdiğinizde ortaya çıkabilir. Visual C++ eklenen .RC dosyayı okuduğunda, eklenen kaynakları üst .RC dosyayla birleştirir. Üst .RC dosyayı kaydettiğinizde, #include deyimi dahil edilen kaynaklar tarafından değiştirilir. Bu birleştirmenin #include gerçekleşmesini istemiyorsanız, Visual C++'a okumadan önce üst .RC dosyadan deyimini kaldırmanız gerekir; ardından Visual C++ kullanarak Derleme Zamanı Yönergesi ile aynı #include deyimi geri ekleyin.

Visual C++ bir .RC dosyaya yukarıdaki kümenin üç türünü kaydeder. Yönergelerde ve kaynaklarda #includeTEXTINCLUDE bilgi içerir (Simge Üst Bilgisi Dosyası, Salt Okunur Sembol Yönergeleri ve Derleme Zamanı Yönergeleri). TEXTINCLUDE Normalde ilgilenmeniz gerekmeyen bir uygulama ayrıntısı olan kaynaklar, Visual C++'ın kümeyi nasıl yönettiği bilgi içerir bölümünde açıklanmıştır.

AppWizard tarafından oluşturulan .RC ve .H dosyaların analizi

AppWizard tarafından üretilen uygulama kodunun incelenmesi, Visual C++ uygulamasının birden çok kaynak dosyasını ve üst bilgi dosyasını nasıl yönettiği hakkında içgörü sağlar. Aşağıda incelenen kod alıntıları, varsayılan seçenekler kullanılarak AppWizard tarafından üretilen bir MYAPP uygulamadan alınıyor.

AppWizard tarafından oluşturulan bir uygulama, aşağıdaki diyagramda özetlenen şekilde birden çok kaynak dosyası ve birden çok üst bilgi dosyası kullanır:

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        AFXRES.RC
        AFXPRINT.RC

Visual C++ Dosya/Eklemeleri Ayarla komutunu kullanarak bu birden çok dosya ilişkilerini görüntüleyebilirsiniz.

MYAPP.RC
Visual C++ kullanarak düzenlediğiniz uygulama kaynak dosyası.

RESOURCE.H uygulamaya özgü üst bilgi dosyasıdır. Her zaman AppWizard tarafından adlandırılır RESOURCE.H ve Visual C++'ın üst bilgi dosyasının varsayılan adlandırmasıyla tutarlıdır. #include Bu üst bilgi dosyası için kaynak dosyasındaki ilk deyimdir (MYAPP.RC):

//Microsoft Visual C++ generated resource script
//
#include "resource.h"

RES\MYAPP.RC2
Visual C++ tarafından düzenlenmeyecek ancak son derlenmiş .EXE dosyaya eklenecek kaynakları içerir. Visual C++ sürüm kaynağı (bu sürümdeki yeni bir özellik) dahil olmak üzere tüm standart kaynakları düzenleyebildiğinden AppWizard varsayılan olarak böyle bir kaynak oluşturmaz. Bu dosyaya kendi özel biçimlendirilmiş kaynaklarınızı eklemek istemeniz durumunda AppWizard tarafından boş bir dosya oluşturulur.

Özel biçimlendirilmiş kaynaklar kullanıyorsanız, Visual RES\MYAPP.RC2 C++ metin düzenleyicisini kullanarak bunları öğesine ekleyebilir ve düzenleyebilirsiniz.

AFXRES.RC ve AFXPRINT.RC çerçevenin belirli özellikleri için gereken standart kaynakları içerir. gibi RES\MYAPP.RC2, çerçeve tarafından sağlanan bu iki kaynak dosyası sonuna MYAPP.RCeklenir ve eklemeleri ayarla iletişim kutusunun Derleme Zamanı Yönergeleri'nde belirtilir. Bu nedenle, Visual C++'da düzenleme yaparken bu çerçeve kaynaklarını doğrudan görüntülemez veya düzenlemezsiniz MYAPP.RC , ancak bunlar uygulamanın ikili .RES dosyasında ve son .EXE dosyasında derlenir. Standart çerçeve kaynakları hakkında, bunları değiştirme yordamları da dahil olmak üzere daha fazla bilgi için bkz . Teknik Not 23.

AFXRES.H, çerçeve tarafından kullanılan ve içinde özel olarak kullanılan AFXRES.RCgibi ID_FILE_NEWstandart simgeleri tanımlar. AFXRES.Hayrıca, Visual C++ tarafından oluşturulan dosyalar ve AFXRES.RCiçin gereken bir alt kümesini WINDOWS.H içeren öğesini dahil WINRES.Hetmek için kullanır#include..RC uygulamasında AFXRES.H tanımlanan simgeler, uygulama kaynak dosyasını (MYAPP.RC ) düzenlerken kullanılabilir. Örneğin, ID_FILE_NEW dosyanın menü kaynağındaki FileNewMYAPP.RC menü öğesi için kullanılır. Bu çerçeve tanımlı simgeleri değiştiremez veya silemezsiniz.

Ek üst bilgi dosyalarını ekleme

AppWizard tarafından oluşturulan uygulama yalnızca iki üst bilgi dosyası içerir: RESOURCE.H ve AFXRES.H. Yalnızca RESOURCE.H uygulamaya özgüdür. Aşağıdaki durumlarda ek salt okunur üst bilgi dosyaları eklemeniz gerekebilir:

Üst bilgi dosyası bir dış kaynak tarafından sağlanır veya üst bilgi dosyasını birden çok proje arasında veya aynı projenin birden çok parçası arasında paylaşmak istiyorsunuz.

Üst bilgi dosyasında, Visual C++'ın dosyayı kaydettiğinde değiştirilmesini veya filtrelemesini istemediğiniz biçimlendirme ve açıklamalar bulunur. Örneğin, sembolik aritmetik kullanan #define korumak isteyebilirsiniz:

#define RED 0
#define BLUE 1
#define GREEN 2
#define ID_COLOR_BUTTON 1001
#define ID_RED_BUTTON (ID_COLOR_BUTTON + RED)
#define ID_BLUE_BUTTON (ID_COLOR_BUTTON + BLUE)
#define ID_GREEN_BUTTON (ID_COLOR_BUTTON + GREEN)

Deyimi aşağıdaki gibi ikinci bir Salt Okunur Sembol Yönergesi olarak belirtmek #include için Kaynak İçerenler komutunu kullanarak ek salt okunur üst bilgi dosyaları ekleyebilirsiniz:

#include "afxres.h"
#include "second.h"

Yeni dosya ilişkisi diyagramı şimdi şöyle görünür:

                   AFXRES.H
    RESOURCE.H     SECOND.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2  
        AFXRES.RC
        AFXPRINT.RC

üst bilgi dosyasını iki .RC dosya arasında paylaşma

Bir üst bilgi dosyasını farklı projelerdeki iki .RC dosya arasında veya muhtemelen aynı projede paylaşmak isteyebilirsiniz. Bunu yapmak için, yukarıda açıklanan Salt Okunur Yönergeler tekniğini her iki dosyaya da .RC uygulayın. İki .RC dosya farklı uygulamalar (farklı projeler) için olduğunda, sonuç aşağıdaki diyagramda gösterilmiştir:

     RESOURCE.H   AFXRES.H   RESOURCE.H  
    (for MYAPP1)  SECOND.H   (for MYAPP2)
          \       /     \       /
           \     /       \     /
          MYAPP1.RC      MYAPP2.RC
           /    \        /     \
          /      \      /       \
RES\MYAPP1.RC2  AFXRES.RC     RES\MYAPP2.RC2
                AFXPRINT.RC

İkinci üst bilgi dosyasının aynı uygulamadaki (proje) iki .RC dosya tarafından paylaşıldığı durum aşağıda açıklandı.

Aynı projede birden çok kaynak dosyası kullanma

Visual C++ ve Kaynak Derleyicisi, bir dosyanın başka bir .RC dosya içinde yer alan yönergeleri aracılığıyla #include aynı projedeki birden çok .RC dosyayı destekler. Birden çok iç içe yerleştirmeye izin verilir. Projenizin kaynaklarını birden çok .RC dosyaya bölmenin çeşitli nedenleri vardır:

  • Kaynakları birden çok dosyaya bölerseniz, birden çok proje ekibi üyesi arasında çok .RC sayıda kaynağı yönetmek daha kolaydır. Dosyaları kullanıma almak ve değişiklikleri denetlemek için bir kaynak denetimi yönetim paketi kullanıyorsanız, kaynakları birden çok .RC dosyaya bölmek, kaynaklarda yapılan değişiklikleri yönetme üzerinde daha iyi denetim sahibi olmanıza neden olur.

  • Kaynaklarınızın bazı bölümleri için , #endifve #definegibi #ifdefönişlemci yönergelerini kullanmak istiyorsanız, bunları Kaynak Derleyicisi tarafından derlenecek salt okunur kaynaklarda yalıtmalısınız.

  • Bileşen .RC dosyaları Visual C++ uygulamasında birden çok bileşik .RC dosyadan daha hızlı yüklenir ve kaydedilir.

  • Metin düzenleyicisi olan bir kaynağın insan tarafından okunabilen bir biçimde tutulmasını istiyorsanız, bu kaynağı visual C++ düzenlemelerinden ayrı bir .RC dosyada tutmalısınız.

  • Kullanıcı tanımlı bir kaynağı başka bir özelleştirilmiş veri düzenleyicisi tarafından yorumlanabilen bir ikili veya metin biçiminde tutmanız gerekiyorsa, Visual C++'ın biçimi onaltılık veri olarak değiştirmemesi için bunu ayrı .RC bir dosyada tutmanız gerekir. .WAV MFC Gelişmiş Kavramlar örneği SPEAKN'deki (ses) dosya kaynakları iyi bir örnektir.

Eklemeleri Ayarla iletişim kutusundaki Derleme Zamanı Yönergeleri'ne ekleyebilirsiniz SECOND.RC :

#include "res\myapp.rc2"  // non-Visual C++ edited resources
#include "second.rc"  // THE SECOND .RC FILE

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources

Sonuç aşağıdaki diyagramda gösterilmiştir:

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        SECOND.RC  
        AFXRES.RC
        AFXPRINT.RC

Derleme Zamanı Yönergeleri'ni kullanarak Visual C++-düzenlenebilir ve düzenlenemez kaynaklarınızı birden çok .RC dosya halinde düzenleyebilirsiniz; burada ana MYAPP.RC dosya diğer .RC dosyalardan başka #include bir şey yapmaz. Visual Studio C++ proje .MAK dosyası kullanıyorsanız, eklenen tüm kaynakların uygulamanızla derlenmesi için ana .RC dosyayı projeye eklemeniz gerekir.

Düzenlenemeyen Visual C++ dosyalarını zorlama

AppWizard tarafından oluşturulan RES\MYAPP.RC2 dosya, Visual C++ içine yanlışlıkla okumak ve sonra biçimlendirme bilgileri kaybıyla geri yazmak istemediğiniz kaynakları içeren bir dosya örneğidir. Bu soruna karşı korumak için dosyanın başına RES\MYAPP.RC2 aşağıdaki satırları yerleştirin:

#ifdef APSTUDIO_INVOKED
    #error this file is not editable by Visual C++
#endif //APSTUDIO_INVOKED

Visual C++ dosyayı derlediğinde .RC hem hem RC_INVOKEDde APSTUDIO_INVOKED öğesini tanımlar. AppWizard tarafından oluşturulan dosya yapısı bozuksa ve Visual C++ yukarıdaki #error satırını okursa önemli bir hata bildirir ve dosyanın okunmasını .RC durdurur.

Birden çok Visual C++tarafından düzenlenen .RC dosya tarafından paylaşılan simgeleri yönetme

Kaynaklarınızı Visual C++'da ayrı ayrı düzenlemek istediğiniz birden çok .RC dosyaya böldüğünüzde iki sorun oluşur:

  • Aynı simgeleri birden çok .RC dosyada paylaşmak isteyebilirsiniz.

  • Visual C++'ın farklı kaynaklara (simgeler) aynı kimlik sayısal değerleri atamasını önlemesine yardımcı olmanız gerekir.

Aşağıdaki diyagramda, ilk sorunla ilgilenen ve .H dosyalarının bir kuruluşu .RC gösterilmektedir:

              MYAPP.RC
             /         \
            /           \
MYSTRS.H   / MYSHARED.H  \  MYMENUS.H
     \    /    /      \   \    \
      \  /    /        \   \    \
      MYSTRS.RC         MYMENUS.RC

Bu örnekte, dize kaynakları bir kaynak dosyasında, MYSTRS.RCmenüler ise başka bir MYMENUS.RCdosyasında tutulur. Komutlar gibi bazı simgelerin iki dosya arasında paylaşılması gerekebilir. Örneğin, araçlar ID_TOOLS_SPELL menüsünde yazım öğesinin menü komut kimliği olabilir; ayrıca uygulamanın ana pencere durum çubuğunda çerçeve tarafından görüntülenen komut isteminin dize kimliği de olabilir.

Simge ID_TOOLS_SPELL paylaşılan üst bilgi dosyasında MYSHARED.Htutulur. Bu paylaşılan üst bilgi dosyasını bir metin düzenleyicisiyle el ile tutarsınız; Visual C++ doğrudan düzenlemez. ve iki kaynak dosyasındaMYSTRS.RC, daha önce açıklandığı gibi Kaynak İçerir komutunu kullanarak için MYAPP.RCSalt Okunur Yönergeleri'ni belirtirsiniz#include "MYSHARED.H".MYMENUS.RC

Herhangi bir kaynağı tanımlamak için kullanmayı denemeden önce paylaşabileceğiniz bir simgeyi tahmin etmek en uygun seçenektir. Paylaşılan üst bilgi dosyasına simgeyi ekleyin ve paylaşılan üst bilgi dosyasını dosyanın Salt Okunur Yönergelerine .RC eklemediyseniz, simgeyi kullanmadan önce bunu yapın. Simgenin bu şekilde paylaşılması beklenmiyorsa, içinde kullanmadan MYSTRS.RCönce simgesine MYMENUS.HMYSHARED.H ait #define deyimini el ile (metin düzenleyicisi kullanarak) taşımanız gerekir.

Birden çok .RC dosyadaki simgeleri yönetirken, Visual C++'ın farklı kaynaklara (semboller) aynı kimlik sayısal değerleri atamasını önlemesine de yardımcı olmanız gerekir. Belirli .RC bir dosya için Visual C++ dört kimlik etki alanının her birine artımlı olarak kimlik atar. Visual C++, düzenleme oturumları arasında, dosyanın Simge Üst Bilgi Dosyası'ndaki .RC etki alanlarının her birinde atanan son kimliği izler. Boş (yeni) .RC bir dosya için APS_NEXT değerler şunlardır:

#define _APS_NEXT_RESOURCE_VALUE  101
#define _APS_NEXT_COMMAND_VALUE   40001
#define _APS_NEXT_CONTROL_VALUE   1000
#define _APS_NEXT_SYMED_VALUE     101

_APS_NEXT_RESOURCE_VALUE bir iletişim kutusu kaynağı, menü kaynağı vb. için kullanılacak bir sonraki simge değeridir. Kaynak simgesi değerleri için geçerli aralık 1 ile 0x6FFF arasındadır.

_APS_NEXT_COMMAND_VALUE , bir komut tanımlaması için kullanılacak bir sonraki sembol değeridir. Komut simgesi değerleri için geçerli aralık 0xDFFF 0x8000.

_APS_NEXT_CONTROL_VALUE , bir iletişim kutusu denetimi için kullanılacak bir sonraki simge değeridir. İletişim kutusu denetimi simge değerleri için geçerli aralık 8 ile 0xDFFF arasındadır.

_APS_NEXT_SYMED_VALUE , Sembol Tarayıcısı'ndaki Yeni komutunu kullanarak bir sembol değerini el ile atadığınızda verilecek bir sonraki sembol değeridir.

Visual C++, yeni .RC bir dosya oluştururken en düşük yasal değer olan biraz daha yüksek değerlerle başlar. AppWizard ayrıca bu değerleri MFC uygulamaları için daha uygun bir değerle başlatır. Kimlik değeri aralıkları hakkında daha fazla bilgi için bkz . Teknik Not 20.

Artık aynı projede bile yeni bir kaynak dosyası oluşturduğunuzda, Visual C++ aynı _APS_NEXT_ değerleri tanımlar. Bu, örneğin iki farklı .RC dosyaya birden çok iletişim kutusu eklerseniz, aynı #define değerinin farklı iletişim kutularına atanma olasılığının yüksek olduğu anlamına gelir. Örneğin, IDD_MY_DLG1 ilk .RC dosyaya ikinci .RC dosyada olduğu gibi IDD_MY_DLG2 aynı sayı olan 101 atanabilir.

Bu sorunu önlemek için, ilgili .RC dosyalardaki dört kimlik etki alanının her biri için ayrı bir sayısal aralık ayırmanız gerekir. Kaynak eklemeye başlamadan önce her .RC bir dosyadaki değerleri el ile güncelleştirerek _APS_NEXT aralıkları ayarlayın. Örneğin, ilk .RC dosya varsayılan _APS_NEXT değerleri kullanıyorsa, ikinci .RC dosyaya aşağıdaki _APS_NEXT değerleri atamak isteyebilirsiniz:

#define _APS_NEXT_RESOURCE_VALUE  2000
#define _APS_NEXT_COMMAND_VALUE   42000
#define _APS_NEXT_CONTROL_VALUE   2000
#define _APS_NEXT_SYMED_VALUE     2000

Elbette, Visual C++'ın ilk .RC dosyada o kadar çok kimlik ataması mümkündür ki, sayısal değerler ikinci .RC dosya için ayrılanlarla çakışmaya başlar. Bu çakışmanın gerçekleşmemesi için yeterince büyük aralıklar ayırmanız gerekir.

, .CPPve .H dosyaları arasındaki .RCbağımlılıkları yönetme

Visual C++ bir .RC dosyayı kaydettiğinde, ilgili RESOURCE.H dosyada simge değişikliklerini de kaydeder. Dosyadaki .RC kaynaklara başvuran tüm dosyalarınız.CPP, genellikle projenizin ana üst bilgi dosyasının RESOURCE.H içinden dosyayı dahil etmek için kullanmalıdır#include. Bu ekleme, geliştirme ortamının üst bilgi bağımlılıkları için kaynak dosyaları tarayan iç proje yönetimi nedeniyle istenmeyen bir yan etkiye yol açar. Visual C++'a her yeni simge eklediğinizde, yönergeleri olan #include "RESOURCE.H" tüm .CPP dosyaların yeniden derlenmiş olması gerekir.

Visual C++, aşağıdaki açıklamayı dosyanın ilk satırı olarak ekleyerek bağımlılığı RESOURCE.H aşıyor RESOURCE.H :

//{{NO_DEPENDENCIES}}

Geliştirme ortamı, bağımlı .CPP dosyaların yeniden derlenmesi gerekmeyecek şekilde değişikliklerini RESOURCE.H yoksayarak bu açıklamayı yorumlar.

Visual C++ dosyayı kaydederken açıklama satırını her zaman bir .RC dosyaya ekler//{{NO_DEPENDENCIES}}. Bazı durumlarda, üzerinde RESOURCE.H derleme bağımlılığının aşılması, bağlantı zamanında algılanmayan çalışma zamanı hatalarına neden olabilir. Örneğin, bir kaynağın simgesine atanan sayısal değeri değiştirmek için Sembol Tarayıcısı'nı kullanırsanız, kaynağa başvuran dosya yeniden derlenmediyse .CPP kaynak doğru şekilde bulunamaz ve uygulama çalışma zamanında yüklenmez. Böyle durumlarda, içindeki simge değişikliklerini etkilediğini bildiğiniz tüm .CPP dosyaları açıkça yeniden derlemeniz veya Tümünü Yeniden Oluştur'a RESOURCE.H seçmeniz gerekir. Belirli bir kaynak grubunun sembol değerlerini sık sık değiştirmeniz gerekiyorsa, yukarıdaki Ek Üst Bilgi Dosyaları Dahil bölümünde açıklandığı gibi bu simgeleri ayrı bir salt okunur üst bilgi dosyasına ayırmayı daha kullanışlı ve daha güvenli bulabilirsiniz.

Visual C++ Küme ekleme bilgilerini nasıl yönetir?

Yukarıda açıklandığı gibi, Dosya menüsü DahilLeri Ayarla komutu üç tür bilgi belirtmenize olanak tanır:

  • Simge Üst Bilgi Dosyası

  • Salt Okunur Sembol Yönergeleri

  • Derleme Zamanı Yönergeleri

Aşağıdaki tabloda Visual C++ uygulamasının bu bilgileri bir .RC dosyada nasıl koruduğu açıklanmaktadır. Visual C++ kullanmak için bu bilgilere ihtiyacınız yoktur, ancak bu bilgiler, Eklemeleri Ayarla özelliğini daha güvenli bir şekilde kullanabilmeniz için anlayışınızı geliştirebilir.

Yukarıdaki üç Küme İçeren bilgi türünün her biri dosyada .RC iki biçimde depolanır: (1) #include veya Kaynak Derleyicisi tarafından yorumlanabilen diğer yönergeler ve (2) yalnızca Visual C++ tarafından yorumlanabilen özel TEXTINCLUDE kaynaklar olarak.

Kaynağın TEXTINCLUDE amacı, Ekleme Bilgilerini Ayarla'yı Visual C++'ın eklemeleri ayarla iletişim kutusunda kullanıma hazır bir biçimde güvenli bir şekilde depolamaktır. TEXTINCLUDE , Visual C++ tarafından tanımlanan bir kaynak türüdür . Visual C++ 1, 2 ve 3 kaynak tanımlama numaralarına sahip olan belirli üç TEXTINCLUDE kaynağı tanır:

TEXTINCLUDE kaynak kimliği Küme ekleme bilgileri türü
Kategori 1 Simge Üst Bilgi Dosyası
2 Salt Okunur Sembol Yönergeleri
3 Derleme Zamanı Yönergeleri

Üç Küme İçeren bilgi türünün her biri, aşağıda açıklandığı gibi AppWizard tarafından oluşturulan varsayılan MYAPP.RC ve RESOURCE.H dosyalar tarafından gösterilmiştir. ve blokları arasındaki BEGINEND ek \0 ve "" belirteçler, rc söz diziminde sırasıyla sıfır sonlandırılan dizeleri ve çift tırnak karakterini belirtmek için gereklidir.

Simge Üst Bilgi Dosyası

Kaynak Derleyicisi tarafından yorumlanan Simge Üst Bilgi Dosyası bilgilerinin biçimi basitçe bir #include deyimdir:

#include "resource.h"

Karşılık gelen TEXTINCLUDE kaynak:

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

Salt Okunur Sembol Yönergeleri

Salt Okunur Sembol Yönergeleri, Kaynak Derleyicisi tarafından yorumlanabilen aşağıdaki formun en üstüne MYAPP.RC eklenir:

#include "afxres.h"

Karşılık gelen TEXTINCLUDE kaynak:

2 TEXTINCLUDE DISCARDABLE
BEGIN
   "#include ""afxres.h""\r\n"
   "\0"
END

Derleme Zamanı Yönergeleri

Derleme Zamanı Yönergeleri, Kaynak Derleyicisi tarafından yorumlanabilen aşağıdaki formun sonuna MYAPP.RC eklenir:

#ifndef APSTUDIO_INVOKED
///////////////////////
//
// From TEXTINCLUDE 3
//
#include "res\myapp.rc2"  // non-Visual C++ edited resources

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources
#endif  // not APSTUDIO_INVOKED

yönergesi #ifndef APSTUDIO_INVOKED , Visual C++'a Derleme Zamanı Yönergelerini atlar.

Karşılık gelen TEXTINCLUDE kaynak:

3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""res\myapp.rc2""  // non-Visual C++ edited resources\r\n"
"\r\n"
"#include ""afxres.rc""  // Standard components\r\n"
"#include ""afxprint.rc""  // printing/print preview resources\r\n"
"\0"
END

Ayrıca bkz.

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