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?,
.CPP
ve dosyaları arasındaki.RC
derleme 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
.RC
bağı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 .RC
seçin.
Simge Üst Bilgi Dosyası
Varsayılan olarak, Visual C++ kaynak dosyasının RESOURCE.H
adı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 #include
TEXTINCLUDE
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.RC
eklenir 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.RC
gibi ID_FILE_NEW
standart simgeleri tanımlar. AFXRES.H
ayrıca, Visual C++ tarafından oluşturulan dosyalar ve AFXRES.RC
için gereken bir alt kümesini WINDOWS.H
içeren öğesini dahil WINRES.H
etmek 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 File
New
MYAPP.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 ,
#endif
ve#define
gibi#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_INVOKED
de 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.RC
menüler ise başka bir MYMENUS.RC
dosyası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.H
tutulur. 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.RC
Salt 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.H
MYSHARED.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.
, .CPP
ve .H
dosyaları arasındaki .RC
bağı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 BEGIN
END
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