Bu notu nasıl Visual c++ kaynak Düzenleyicisi'ni birden fazla kaynak dosyalarını destekler açıklar ve üstbilgi dosyaları tek bir paylaşılan proje veya birden fazla proje ve nasıl sen-ebilmek almak bu desteğinden arasında paylaşılan. Bu notu bu sorulara cevaplar:
Projeniz için bir ek kaynak dosyası eklerseniz, ClassWizard eklenen dosya kaynakları tanımaz bilmeniz gerekir.
Bu Not Yukarıdaki sorulara şöyle cevap yapılandırılmıştır:
Genel görünümünü nasıl Visual c++ kaynak ve başlık dosyaları yönetir
Visual c++ tek yönetir.rc kaynak dosyası ve ilgili.H üstbilgi dosyası dosyaları sıkı eşleşmiş bir çift olarak. Zaman düzenleme ve kaynaklarını kaydetmek bir.rc dosyası, sizin dolaylı olarak düzenleyebilir ve sembolleri ilgili olarak kaydedebilirsiniz.H dosyası. Her ne kadar açık ve çoklu düzenleme.rc dosyalarını verilen herhangi bir anda (Visual C++'ın MDI arayüz kullanarak).rc dosyası, dolaylı bir karşılık gelen üstbilgi dosyası düzenleme.
Sembol üstbilgi dosyası
Varsayılan olarak, Visual c++ her zaman ilgili başlık dosyasının kaynak adları.H, ne olursa olsun adı kaynak dosyasını (örneğin, UYGULAMAM.RC). Visual c++ ile Set dosya içerir komutunu kullanarak bu üstbilgi dosyası adı içerir ayarla iletişim kutusunda simgeyi başlığı dosya dosyasını güncelleştirerek değiştirebileceğiniz.
Salt okunur sembolü direktifleri
Visual c++ yalnızca düzenlemeleri bir üstbilgi dosyası herhangi için verilen rağmen.rc dosyası, Visual c++, ek salt başlık dosyalarında tanımlanmış semboller başvurularını destekler. Visual c++ ile Set dosya içerir komutunu kullanarak herhangi bir sayıda ek salt başlık dosyalarının erişimle sembolü direktifleri belirtebilirsiniz. Yeni bir kaynak eklediğinizde "salt okunur" kısıtlama anlamına gelir.rc dosyası salt okunur üstbilgi dosyasında tanımlı sembolü kullanabilirsiniz; ama kaynağı silerseniz, sembol salt üstbilgi dosyasında tanımlanan kalıyor. Salt okunur bir simgeye atanmış sayısal değeri değiştirilemez.
Derleme yönergeleri
Visual c++, burada bir kaynak dosyalarının, iç içe de destekler.Başka include'd # rc dosyasıdır. Düzenlediğinizde bir verilen.rc dosyası, Visual c++, include'd # dosyalarındaki kaynakları kullanarak görünür değildir. Ama ne zaman sen derleyin.rc dosyası, include'd # dosyaları da derlenmektedir. Visual c++ ile Set dosya içerir komutunu kullanarak include'd # herhangi bir sayıda belirtebilirsiniz.rc dosyaları olarak derleme yönergeleri.
Ne olur Not Visual c++ okursanız bir.# İnclude rc dosya başka 's.rc dosya yani değil bir derleme yönergesi belirtilen. Bu durum Visual c++ için getirmek çıkabilecek bir.Size daha önce el ile bir metin düzenleyicisiyle Bakımı rc dosyası. Ne zaman Visual c++ include'd # okur.rc dosyası, üste include'd # kaynaklarını birleştirir.rc dosyası. Üst kaydettiğinizde.rc dosyası, # include deyimi, # include'd kaynaklar tarafından değiştirilecektir. Bu birleştirme olmasını istemiyorsanız, o kaldırmalısınız # include deyimini üst.rc dosya Visual c++ okumadan önce ; Visual c++ kullanarak eklemek geri aynı # include ifadesi olarak bir derleme yönergesi.
Visual c++ kaydeder bir.rc dosya üç çeşit, Set içeren (sembol üstbilgi dosyası, salt okunur sembolü direktifler ve derleme yönergeleri) # bilgilerini direktifler ve TEXTINCLUDE kaynakları. TEXTINCLUDE kaynakları, normalde uğraşmak gerekmez bir uygulama detay Nasıl Visual c++ yönetir içeren bilgi kümesi açıklanmıştır.
AppWizard tarafından oluşturulmuş analizi.rc ve.H dosya
AppWizard tarafından üretilen uygulama kodunu inceleyerek Visual C++'ın birden çok kaynak dosyaları ve üstbilgi dosyaları yönetme biçimini içine bir fikir edinmenizi sağlar. Varsayılan seçenekleri kullanarak AppWizard tarafından üretilen bir UYGULAMAM uygulamasından incelendiğinde aşağıdaki kodu alıntılar vardır.
AppWizard oluşturulan uygulama birden çok kaynak ve birden fazla başlık dosyaları aşağıdaki diyagramda özetlendiği gibi kullanır:
nbsp; KAYNAK.S AFXRES.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2 AFXRES.RC AFXPRINT.rc & nbsp
Bu birden çok dosya ilişkileri içeren Visual c++ File/komutunu kullanarak görüntüleyebilirsiniz.
UYGULAMAM.RC
Visual c++ kullanarak düzenleme uygulama kaynak dosyası.
KAYNAK.H uygulamaya özel üstbilgi dosyası değildir. Her zaman kaynak adı verilir.H AppWizard, Visual C++'ın varsayılan ile tutarlı olarak başlık dosya adlandırma. # İnclude için bu üstbilgi dosyası ilk ifade kaynak dosyasında (UYGULAMAM.RC):
//Microsoft visual c ++ kaynak kod oluşturulur
//
# include "resource.h"
RES\MYAPP.RC2
Visual c++ tarafından düzenlenecek değil ama derlenmiş final dahil edilecek kaynakları içerir.exe eğe. Visual c++ sürümü kaynak (Bu sürümde yeni bir özellik) dahil tüm standart kaynakları düzenleyebilirsiniz çünkü AppWizard böyle bir kaynak yok varsayılan olarak oluşturur. Kendi özel biçimlendirilmiş kaynakları bu dosyaya eklemek istediğiniz takdirde boş bir dosya AppWizard tarafından oluşturulur.
Özel biçimlendirilmiş kaynaklar kullanıyorsanız, bunları res\myapp için ekleyebilirsiniz.RC2 ve Visual c++ Metin Düzenleyicisi'ni kullanarak bunları düzenleyin.
AFXRES.rc ve AFXPRINT.rc çerçevesinde belirli özellikleri tarafından gerekli standart kaynakları içerir. res\myapp gibi.RC2, UYGULAMAM sonunda include'd # bu iki çerçeve tarafından sağlanan kaynak dosyaları bulunmaktadır.rc ve derleme yönergeleri içerir ayarla iletişim kutusunda belirtilir. Böylece, doğrudan görüntülemek veya UYGULAMAM düzenlerken bu çerçeve kaynakları düzenlemek.rc Visual c++, ancak uygulamanın ikili derlenmiştir.res dosya ve final.exe eğe. Onları değiştirme prosedürleri gibi standart çerçeve kaynakları hakkında daha fazla bilgi için bkz: Teknik Not 23.
AFXRES.H çerçeve tarafından ve özellikle afxres kullanılan ID_FILE_NEWgibi standart sembolleri tanımlar.RC. AFXRES.S # de'nın WINRES.H WINDOWS kümesini içerir.H tarafından oluşturulan Visual c++ ihtiyaç vardır.rc dosya olarak afxres.RC. afxres içinde tanımlanan simgeler.H mevcut uygulama kaynak dosyası (UYGULAMAM. düzenlemeRC). Örneğin, ID_FILE_NEW UYGULAMAM dosya yeni menü madde için kullanılır.RC'ın menüsünde Kaynak. Değiştirmek ya da silmek bu çerçeve tanımlı semboller.
AppWizard oluşturulan uygulama yalnızca iki başlık dosyalarını içerir: kaynak.H ve afxres.h. yalnızca kaynak.H, uygulamaya özgü. Sen-ebilmek lüzum-e aşağıdaki durumlarda ek salt üstbilgi dosyaları eklemek
Üstbilgisini dosyanın dış kaynak tarafından sağlanan veya üstbilgi dosyası birden fazla proje veya aynı proje için birden fazla kısımları arasında paylaştırmak istediğiniz.
Üstbilgi dosyası, biçimlendirme ve değiştirme veya dosyayı kaydettiğinde filtre için Visual c++ istemediğiniz yorumları vardır. Örneğin, belki # korumak istediğiniz tanımla'nın sembolik aritmetik gibi kullanmak:
# define red 0
# define mavi 1
# define green 2
# define ID_COLOR_BUTTON 1001
# define ID_RED_BUTTON (ID_COLOR_BUTTON + kırmızı)
# define ID_BLUE_BUTTON (ID_COLOR_BUTTON + mavi)
# define ID_GREEN_BUTTON (ID_COLOR_BUTTON + yeşil)
# İnclude ifadesi olarak ikinci bir erişimle sembolü yönergesi olarak belirtmek için Set dosya içerir komutunu kullanarak ek salt üstbilgi dosyaları içerebilir:
# include "afxres.h"
# include "second.h"
Yeni Dosya ilişki diyagramı artık şuna:
nbsp; AFXRES.S KAYNAK.H İKİNCİ.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2 AFXRES.RC AFXPRINT.rc & nbsp
İkisinin arasına bir başlık dosya paylaşımı.rc dosya
Üstbilgi dosyası iki arasında paylaşmak isteyebilirsiniz.Farklı projeler veya aynı proje içinde muhtemelen rc dosyalar. Bunu yapmak için sadece iki yukarıda erişimle yönergelerin tekniği uygulanır.rc dosyaları. Durumda nerede iki.rc dosyalar farklı uygulamalar için (farklı projeler), sonucu aşağıdaki diyagramda gösterilmiştir:
nbsp; KAYNAK.S AFXRES.S KAYNAK.H (MYAPP1 için) ikinci.H (for MYAPP2)
\ / \ /
\ / \ /
MYAPP1.RC MYAPP2.RC
/ \ / \
/ \ / \
RES\MYAPP1.RC2 AFXRES.RC RES\MYAPP2.RC2 AFXPRINT.rc & nbsp
İkinci başlık dosyası iki tarafından paylaşıldığı bir durumda.rc dosyalarını aynı uygulama (proje) altında ele alınan.
Aynı projenin birden çok kaynak dosyalarını kullanma
Visual c++ ve kaynak derleyici Çoklu destekler.rc # ile aynı proje dosyalarında dahil 's biri.rc dosya içinde başka. Birden çok iç içe kullanılabilir. Projenizin kaynakları çok bölmek için çeşitli nedenleri vardır.rc dosya:
Sen-ebilmek # ikinci içerir.Derleme yönergeleri içerir ayarla iletişim kutusunda rc:
# i&nclude "res\myapp.rc2"nbsp; / / non - Visual c++ düzenlenmiş kaynaklar
# include "second.rc" / / ikinci.RC DOSYA
# include "afxres.rc" / / standart bileşenler
# include "afxprint.rc" / / yazdırma/önizleme kaynakları Yazdır
Sonuç aşağıdaki diyagramda gösterilen:
nbsp; KAYNAK.S AFXRES.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2
İKİNCİ.RC AFXRES.RC AFXPRINT.rc & nbsp
Derleme yönergeleri kullanarak, birden çok Visual C++ düzenlenebilir ve düzenlenemeyen kaynaklarınızı düzenleyebilirsiniz.rc dosyalarını nerede "ana" UYGULAMAM.# İnclude diğer ama rc hiçbir şey yok.rc dosyaları. Bir Visual c++ projesinin kullanıyorsanız.mak dosya, daha sonra "master" içermelidir.rc dosya proje # include'd kaynakların tümünü uygulamanız ile derlenen böylece.
Zorlama düzenlenemez Visual c++ dosya
AppWizard oluşturulan res\myapp.RC2 dosyasıdır yapmak kaynakları içeren bir dosya örneği Visual c++ yanlışlıkla okuyup sonra yazmak istediğiniz bilgileri biçimlendirme kaybı ile vazgeçme. Buna karşı korumak için biz res\myapp başlarında aşağıdaki satırları yerleştirin.RC2 dosya:
#ifdef APSTUDIO_I&NVOKED
nbsp; görüntülenebilecek dosya Visual c++ tarafından düzenlenebilir değil
endif //APSTUDIO_INVOKED
Visual c++ zaman derler.rc dosyası, hem APSTUDIO_INVOKED hem de RC_INVOKEDtanımlar. AppWizard oluşturulan dosya yapısı bozuk ve Visual c++ yukarıdaki görüntülenebilecek satır okur, önemli bir hata raporları ve okuma durdurmak.rc dosya.
Birden fazla Visual tarafından C++ düzenlenmiş paylaşılan sembolleri yönetme.rc dosya
İki konu, kaynaklarınızı çok içine kadar bölünmüş ortaya.Visual c++ ile ayrı ayrı düzenlemek istediğiniz rc dosya:
Aşağıdaki diyagramda, bir organizasyonun gösterilmektedir.rc ve.İlk konu ile ilgilenir h dosya:
nbsp; UYGULAMAM.RC
/ \
/ \
MYSTRS.H / MYSHARED.H \ MYME&NUS.H
\ / / \ \ \
\ / / \ \ \
MYSTRS.RC MYMENUS.RC
Örneğin, bir kaynak dosyasında, mystrs dize kaynakları tutulur.rc ve menüler başka mymenus tutulur.RC. Bazı semboller, gibi komutları için iki dosya arasında paylaştırılması gerekir. Örneğin, bir ID_TOOLS_SPELL, Araçlar menüsünden Yazım madde menü komutu kimliği olabilir; ve uygulamanın ana penceresinin durum çubuğundaki çerçevede görüntülenen komut istemi dize kimliği de olabilir.
ID_TOOLS_SPELL sembolü myshared paylaşılan üstbilgi dosyasında tutulur.h., bu paylaşılan üstbilgi dosyasına el ile bir metin düzenleyicisiyle korumak; Visual c++ doğrudan düzenlemek değil. İki kaynak dosyaları: mystrs.rc ve mymenus.rc, belirttiğiniz # myshared içerir.UYGULAMAM için salt okunur direktifleri h.rc, daha önce açıklandığı gibi Set dosya içerir komutunu kullanarak.
Sembolü pay kullanma denemeden önce öngörmek için en uygun herhangi bir kaynağı tanımlamak için. Sembolü paylaşılan üstbilgi dosyasına ekleyin ve önceden varsa # erişimle yönergelerin için de paylaşılan üstbilgi dosyası include'd.rc dosya, simgesini kullanmadan önce bunu. Sembol bu şekilde paylaşımı tahmin etmedi, o zaman elle gerekir (bir metin düzenleyicisi kullanarak) # define deyimi, sembol için demek, hareket mymenus.H myshared.H mystrs kullanmadan önce.RC.
Ne zaman birden çok semboller yönetir.rc dosyalarını Visual c++ aynı kimliği farklı kaynaklara (simgeler) sayısal değerler atama önlemek yardımcı olmalıdır. Herhangi için verilir.rc dosyası, Visual c++ kimlikleri etki alanlarının her biri dört kimliği içinde kademeli olarak atar. Oturumları düzenleme arasında Visual c++ atanan her sembol üstbilgi dosyasında etki son kimliğini izler.rc dosyası. İşte ne aps_next için boş (yeni) değerleridir.rc dosya:
# define _APS_&NEXT_RESOURCE_VALUEnbsp; 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 kaynağı, menü kaynağı ve benzerleri için kullanılacak sonraki sembol değerdir. Kaynak simgesi değerler için geçerli Aralık 1-0x6FFF olduğunu.
_aps_next_command_value için bir komut kimlik kullanılacak sonraki sembol değerdir. 0X8000-0xDFFF komut sembol değerleri için geçerli aralığı.
_aps_next_control_value iletişim denetim için kullanılacak sonraki sembol değerdir. 8-0XDFFF iletişim denetimi simgesi değerler için geçerli aralığı.
_aps_next_symed_value el simgesini tarayıcı yeni komutunu kullanarak simge değeri atadığınızda verileceği ileri sembolü değerdir.
Yeni bir Visual c++ başlar biraz daha yüksek değerler, düşük yasal ne zaman değer oluşturma.rc dosyası. AppWizard de bu değerler mfc uygulamaları için daha uygun bir şey başlatılır. ID değeri aralıkları hakkında daha fazla bilgi için bkz: Teknik Not 20.
Şimdi bile aynı projede yeni bir kaynak dosyası oluşturun, her zaman, Visual c++ _aps_next_ değerleri tanımlar. Bu, eğer eklemek, diyelim ki, çok farklı iki dialogs anlamına gelir.Muhtemelen rc dosyalarını, aynı # değerini tanımlamak için farklı iletişim kutularının atanacaktır. Örneğin, ilk IDD_MY_DLG1.rc dosyası atanabilir aynı numara, 101, ikinci bir IDD_MY_DLG2 olarak.rc dosya.
Bunu önlemek için her dört etki alanlarının kimlikleriyle ilgili ayrı bir sayısal aralığı ayırmak.rc dosyaları. Her _aps_next değerler el ile güncelleştirerek yapmak.Kaynakları eklemeye başlayın rc dosyalarını önce . Örneğin, eğer ilk.rc dosyası varsayılan _aps_next değerleri kullanır, sonra ikinci aşağıdaki _aps_next değerleri atamak isteyebilirsiniz.rc dosya:
# define _APS_&NEXT_RESOURCE_VALUEnbsp; 2000
# define _aps_next_command_value 42000
# define _aps_next_control_value 2000
# define _aps_next_symed_value 2000
Tabii ki, Visual c++ çok kimlikleri ilk atayacağı hala mümkündür.Bu ikinci aittir örtüşmesi için sayısal değerler başlangıç rc dosyası.rc dosyası. Böylece bu değil ortaya yeterince büyük aralıkları ayırmak.
Arasındaki bağımlılıkları yönetme.RC.cpp, ve.H dosya
Ne zaman Visual c++ kaydeder bir.rc dosya, ayrıca karşılık gelen kaynak sembolü değişiklikleri kaydeder.H dosyası. Herhangi biri sizin.Kaynaklara başvurmak cpp eğe.rc dosyası gerekir # kaynak içerir.H dosyası, genellikle içinden projenizin ana başlık dosyası. Bu istenmeyen bir yan etkisi başlığı bağımlılıkları için kaynak dosyaları tarayan geliştirme ortamı'nın iç proje yönetimi nedeniyle yol açar. Visual C++'da, yeni sembol eklemek her zaman tüm.# KAYNAK dahil cpp eğe.H recompiled gerekir.
Visual c++ kaynak bağımlılığı circumvents.H tarafından aşağıdaki yorum kaynağı ilk satırı dahil.H dosyası:
//{{NO_DEPENDENCIES}}
Geliştirme ortamı, kaynak değişiklikleri görmezden Bu yorum yorumlar.H yani bu bağımlı.cpp eğe, recompiled gerekmez.
Visual c++ her zaman ekler //{{NO_DEPENDENCIES}} yorum satırına bir.Dosyayı kaydettiğinde rc dosyası. Bazı durumlarda, kaynak derleme bağımlılığı engellemeyi.H çalışma zamanı hataları bağlantı anda undetected neden olabilir. Örneğin, atanmış kaynak için bir sembole sayısal değerini değiştirmek için sembol tarayıcısı kullanıyorsanız, kaynak değil doğru bulunabilir ve uygulama çalıştırma eğer yüklü.Kaynağa atıfta cpp dosya recompiled değil. Bu gibi durumlarda size açıkça herhangi derlemeniz.Bildiğiniz cpp dosyaları kaynak sembolü değişikliklerden etkilenir.H veya Seç tümünü yeniden. Eğer sık sık belirli bir kaynak grubunun sembol değerlerini değiştirmek gerek varsa, muhtemelen o daha rahat ve güvenli Ek üstbilgi dosyaları dahil olmak üzere yukarıdaki bölümde açıklandığı gibi bu semboller bir ayrı salt üstbilgi dosyasına dışarı kırmaya bulacaksınız.
Visual c++ yöneten nasıl bilgi içerir
Yukarıda bahsedildiği gibi Dosya menüsü komutu Set içerir üç türde bilgileri belirtmenize olanak tanır:
Visual c++ bu bilgileri nasıl saklandığına ilişkin aşağıdaki açıklar bir.rc dosyası. Visual c++ kullanmak için bu bilgilere gerek yoktur, ancak Set içeren özellik daha güvenle kullanabilmesi anlayış artırabilir.
Set içeren bilgileri yukarıdaki üç tür depolanır.rc dosyası iki formu: (1) olarak # include ya da diğer yönergelerin yorumlanabilir kaynak derleyici ve (2) olarak özel TEXTINCLUDE kaynaklarınca yorumlanabilir yalnızca Visual c++.
Güvenli bir biçimde Visual C++'ın içerir ayarla iletişim kutusunda hazır prezentabl Set dahil bilgileri depolamak için TEXTINCLUDE kaynak amacı budur. TEXTINCLUDE Visual c++ tarafından tanımlanan bir kaynak türü olduğunu. Visual c++ kaynak kimlik numarası 1, 2 ve 3 olan üç belirli TEXTINCLUDE kaynakları tanır:
| TEXTINCLUDE kaynak i.d. | Set içeren bilgi türü |
| 1 | Sembol üstbilgi dosyası |
| 2 | Salt okunur sembolü direktifleri |
| 3 | Derleme yönergeleri |
Set içerir bilgiler üç tür UYGULAMAM varsayılan olarak gösterilmektedir.rc ve kaynak.Aşağıda açıklandığı gibi AppWizard tarafından oluşturulan s dosyaları. Ekstra \0 ve "" belirteçleri BEGIN ve end bloklar arasında gerekli rc sözdizimi tarafından sırasıyla sıfır sonlandırılmış dizeler ve çift tırnak karakteri belirtmek için.
Sembol üstbilgi dosyası
Sadece bir # include deyimi şeklidir kaynak derleyici tarafından yorumlanan sembolü üstbilgi dosyası bilgileri:
# include "resource.h"
İlgili TEXTINCLUDE kaynak:
1 TEXTINCLUDE DISCARDABLE
BAŞLAMAK
# resource.h\0 "
SONUNDA
Salt okunur sembolü direktifleri
Salt okunur sembolü direktifleri UYGULAMAM üst kısmında bulunur.rc kaynak derleyici tarafından aşağıdaki biçimde yorumlanabilir:
# include "afxres.h"
İlgili TEXTINCLUDE kaynak:
2 TEXTINCLUDE DISCARDABLE
BAŞLAMAK
"# include" "afxres.h""\r\n"
"\0"
SONUNDA
Derleme yönergeleri
Derleme yönergeleri UYGULAMAM sonuna eklenir.rc kaynak derleyici tarafından aşağıdaki biçimde yorumlanabilir:
#ifndef APSTUDIO_I&NVOKED
///////////////////////
//
/ / TEXTINCLUDE 3
//
# include "res\myapp.rc2"nbsp; / / non - Visual c++ düzenlenmiş kaynaklar
# include "afxres.rc" / / standart bileşenler
# include "afxprint.rc" / / yazdırma/önizleme kaynakları Yazdır
endif / / APSTUDIO_INVOKED
Derleme yönergesi atlamak için Visual c++ #ifndef APSTUDIO_INVOKED yönergesi sağlar.
İlgili TEXTINCLUDE kaynak:
3 TEXTI&NCLUDE DISCARDABLE
BAŞLAMAK
"# include" "res\myapp.rc2""nbsp; / / non - Visual c++ resources\r\n düzenlenen "
"\r\n"
"# include""afxres.rc" "/ / Standard components\r\n"
"# include""afxprint.rc" "/ / yazdırma/önizleme resources\r\n baskı"
"\0"
SONUNDA
Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre