Bagikan melalui


TN035: Menggunakan beberapa file sumber daya dan file header dengan Visual C++

Catatan

Catatan teknis berikut belum diperbarui sejak pertama kali disertakan dalam dokumentasi online. Akibatnya, beberapa prosedur dan topik mungkin kedaluarsa atau salah. Untuk informasi terbaru, disarankan agar Anda mencari topik yang menarik dalam indeks dokumentasi online.

Catatan ini menjelaskan bagaimana editor sumber daya Visual C++ mendukung beberapa file sumber daya dan file header yang dibagikan dalam satu proyek atau dibagikan di beberapa proyek dan bagaimana Anda dapat memanfaatkan dukungan tersebut. Catatan ini menjawab pertanyaan-pertanyaan ini:

  • Kapan Anda mungkin ingin membagi proyek menjadi beberapa file sumber daya dan/atau file header, dan bagaimana Anda melakukannya

  • Bagaimana Anda berbagi file header .H umum antara dua .RC file

  • Bagaimana Anda membagi sumber daya proyek menjadi beberapa .RC file

  • Bagaimana Anda (dan alat) mengelola dependensi build antara .RC, , .CPPdan .H file

Anda harus menyadari bahwa jika Anda menambahkan file sumber daya tambahan ke proyek Anda, ClassWizard tidak akan mengenali sumber daya dalam file yang ditambahkan.

Catatan ini disusun untuk menjawab pertanyaan di atas sebagai berikut:

  • Gambaran umum tentang bagaimana Visual C++ mengelola file sumber daya dan file header memberikan gambaran umum tentang bagaimana perintah Kumpulan Sumber Daya Menyertakan di Visual C++ memungkinkan Anda menggunakan beberapa file sumber daya dan file header dalam proyek yang sama.

  • Analisis AppWizard-create .RC dan .H Files melihat beberapa file sumber daya dan header yang digunakan oleh aplikasi yang dibuat AppWizard. File-file ini berfungsi sebagai model yang baik untuk file sumber daya tambahan dan file header yang mungkin ingin Anda tambahkan ke proyek Anda.

  • Menyertakan file header tambahan menjelaskan di mana Anda mungkin ingin menyertakan beberapa file header, dan menyediakan detail cara melakukannya.

  • Berbagi file header antara dua .RC file menunjukkan bagaimana Anda dapat berbagi satu file header antara beberapa .RC file dalam proyek yang berbeda, atau mungkin dalam proyek yang sama.

  • Menggunakan beberapa file sumber daya dalam proyek yang sama menjelaskan di mana Anda mungkin ingin memecah proyek Anda menjadi beberapa .RC file, dan memberikan detail cara melakukannya.

  • Penerapan file Visual C++ yang tidak dapat diedit menjelaskan bagaimana Anda dapat memastikan Visual C++ tidak mengedit dan secara tidak sengaja memformat ulang sumber daya kustom.

  • Mengelola simbol yang dibagikan oleh beberapa file Visual C++-edit menjelaskan .RC cara berbagi simbol yang sama di beberapa .RC file dan cara menghindari penetapan nilai numerik ID duplikat.

  • Mengelola dependensi antara .RCfile , , .CPPdan .H menjelaskan bagaimana Visual C++ menghindari file kompilasi .CPP ulang yang tidak perlu yang bergantung pada file simbol sumber daya.

  • Cara Visual C++ mengelola Set Menyertakan informasi menyediakan detail teknis tentang bagaimana Visual C++ melacak beberapa file (berlapis) .RC dan beberapa file header yang disertakan oleh .RC file.

Gambaran umum tentang bagaimana Visual C++ mengelola file sumber daya dan file header

Visual C++ mengelola satu .RC file sumber daya dan file header yang sesuai .H sebagai sepasang file yang digabungkan dengan erat. Saat mengedit dan menyimpan sumber daya dalam .RC file, Anda secara tidak langsung mengedit dan menyimpan simbol dalam file yang .H sesuai. Meskipun Anda dapat membuka dan mengedit beberapa .RC file sekaligus (menggunakan antarmuka pengguna MDI Visual C++), untuk file tertentu, .RC Anda secara tidak langsung mengedit satu file header yang sesuai.

Dialog Menyertakan Sumber Daya Tampilan Sumber Daya

Untuk mengakses Sumber Daya Termasuk, buka Tampilan Sumber Daya lalu klik .RC kanan file dan pilih Sumber Daya Termasuk.

File Header Simbol

Secara default, Visual C++ selalu memberi nama file RESOURCE.Hheader yang sesuai , terlepas dari nama file sumber daya (misalnya, MYAPP.RC). Bagian File Header Simbol: dalam dialog Menyertakan Sumber Daya di Visual C++, memungkinkan Anda mengubah nama file header ini. Masukkan nama file baru di kotak edit bagian.

Catatan

file sumber daya yang tidak terletak di direktori .RC yang sama dengan file harus menambahkan jalur relatif dengan escaped-''\' untuk dibaca dengan benar.

Direktif Simbol Baca-Saja

Meskipun Visual C++ hanya mengedit satu file header untuk file tertentu .RC , Visual C++ mendukung referensi ke simbol yang ditentukan dalam file header baca-saja tambahan. Bagian Direktif Simbol Baca-Saja: dalam dialog Menyertakan Sumber Daya memungkinkan Anda menentukan sejumlah file header baca-saja tambahan sebagai Direktif Simbol Baca-Saja. Pembatasan "baca-saja" berarti bahwa ketika Anda menambahkan sumber daya baru dalam .RC file, Anda dapat menggunakan simbol yang ditentukan dalam file header baca-saja. Namun, jika Anda menghapus sumber daya, simbol masih tetap ditentukan dalam file header baca-saja. Anda tidak dapat mengubah nilai numerik yang ditetapkan ke simbol baca-saja.

Direktif Waktu Kompilasi

Visual C++ juga mendukung bersarangnya file sumber daya, di mana satu .RC file disertakan dalam file lain dengan menggunakan #include arahan. Saat Anda mengedit file tertentu .RC menggunakan Visual C++, sumber daya apa pun dalam file yang disertakan tidak terlihat. Tetapi ketika Anda mengkompilasi .RC file, file yang disertakan juga dikompilasi. Bagian Compile-Time Directives: dalam dialog Resources Include memungkinkan Anda menentukan sejumlah .RC file untuk disertakan sebagai Compile-Time Directives.

Perhatikan apa yang terjadi jika Anda membaca visual C++ .RC file yang menyertakan file lain .RC yang tidak* ditentukan sebagai Direktif Waktu Kompilasi. Situasi ini mungkin muncul ketika Anda membawa ke Visual C++ .RC file yang sebelumnya Telah Anda pertahankan secara manual dengan editor teks. Saat Visual C++ membaca file yang disertakan .RC , visual C++ menggabungkan sumber daya yang disertakan ke dalam file induk .RC . Saat Anda menyimpan file induk .RC , #include pernyataan, yang berlaku, akan digantikan oleh sumber daya yang disertakan. Jika Anda tidak ingin penggabungan ini terjadi, Anda harus menghapus #include pernyataan dari file induk .RC sebelum membacanya ke Visual C++; lalu menggunakan Visual C++, tambahkan kembali pernyataan yang sama #include dengan Direktif Waktu Kompilasi.

Visual C++ menyimpan dalam .RC file tiga jenis Set di atas Mencakup informasi (File Header Simbol, Direktif Simbol Baca-Saja, dan Direktif Waktu Kompilasi) dalam #include arahan dan sumber TEXTINCLUDE daya. Sumber TEXTINCLUDE daya, detail implementasi yang biasanya tidak perlu Anda tangani, dijelaskan dalam Cara Visual C++ mengelola set menyertakan informasi.

Analisis file dan .H yang dibuat .RC AppWizard

Memeriksa kode aplikasi yang dihasilkan oleh AppWizard memberikan wawasan tentang bagaimana Visual C++ mengelola beberapa file sumber daya dan file header. Kutipan kode yang diperiksa di bawah ini berasal dari aplikasi yang MYAPP diproduksi oleh AppWizard menggunakan opsi default.

Aplikasi yang dibuat AppWizard menggunakan beberapa file sumber daya dan beberapa file header, seperti yang dirangkum dalam diagram di bawah ini:

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

Anda dapat melihat beberapa hubungan file ini menggunakan perintah Visual C++ File/Set Includes.

MYAPP.RC
File sumber daya aplikasi yang Anda edit menggunakan Visual C++.

RESOURCE.H adalah file header khusus aplikasi. Ini selalu dinamai RESOURCE.H oleh AppWizard, konsisten dengan penamaan default Visual C++dari file header. #include untuk file header ini adalah pernyataan pertama dalam file sumber daya (MYAPP.RC):

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

RES\MYAPP.RC2
Berisi sumber daya yang tidak akan diedit oleh Visual C++ tetapi akan disertakan dalam file yang dikompilasi .EXE akhir. AppWizard tidak membuat sumber daya tersebut secara default, karena Visual C++ dapat mengedit semua sumber daya standar, termasuk sumber daya versi (fitur baru dalam rilis ini). File kosong dihasilkan oleh AppWizard jika Anda ingin menambahkan sumber daya berformat kustom Anda sendiri ke file ini.

Jika Anda menggunakan sumber daya berformat kustom, Anda dapat menambahkannya dan RES\MYAPP.RC2 mengeditnya menggunakan editor teks Visual C++.

AFXRES.RC dan AFXPRINT.RC berisi sumber daya standar yang diperlukan oleh fitur kerangka kerja tertentu. Seperti RES\MYAPP.RC2, kedua file sumber daya yang disediakan kerangka kerja ini disertakan di akhir MYAPP.RC, dan ditentukan dalam Petunjuk Waktu Kompilasi dari kotak dialog Atur Termasuk. Dengan demikian, Anda tidak langsung melihat atau mengedit sumber daya kerangka kerja ini saat mengedit MYAPP.RC di Visual C++, tetapi dikompilasi ke dalam file biner .RES aplikasi dan file akhir .EXE . Untuk informasi selengkapnya tentang sumber daya kerangka kerja standar, termasuk prosedur untuk memodifikasinya, lihat Catatan Teknis 23.

AFXRES.H mendefinisikan simbol standar, seperti ID_FILE_NEW, yang digunakan oleh kerangka kerja dan secara khusus digunakan dalam AFXRES.RC. AFXRES.H juga menggunakan #include untuk menyertakan WINRES.H, yang berisi subset yang WINDOWS.H diperlukan oleh file yang dihasilkan .RC Visual C++ dan AFXRES.RC. Simbol yang didefinisikan tersedia AFXRES.H saat Anda mengedit file sumber daya aplikasi (MYAPP.RC). Misalnya, ID_FILE_NEW digunakan untuk FileNew item menu di MYAPP.RC sumber daya menu file. Anda tidak dapat mengubah atau menghapus simbol yang ditentukan kerangka kerja ini.

Menyertakan file header tambahan

Aplikasi yang dibuat AppWizard hanya mencakup dua file header: RESOURCE.H dan AFXRES.H. Hanya RESOURCE.H khusus aplikasi. Anda mungkin perlu menyertakan file header baca-saja tambahan dalam kasus berikut:

File header disediakan oleh sumber eksternal, atau Anda ingin berbagi file header di antara beberapa proyek atau beberapa bagian dari proyek yang sama.

File header memiliki pemformatan dan komentar yang Anda tidak ingin Visual C++ mengubah atau memfilter saat menyimpan file. Misalnya, mungkin Anda ingin mempertahankan #define yang menggunakan aritmatika simbolis seperti:

#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)

Anda dapat menyertakan file header baca-saja tambahan dengan menggunakan perintah Termasuk Sumber Daya untuk menentukan #include pernyataan sebagai Direktif Simbol Baca-Saja kedua, seperti dalam:

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

Diagram hubungan file baru sekarang terlihat seperti ini:

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

Berbagi file header di antara dua .RC file

Anda mungkin ingin berbagi file header antara dua .RC file yang berada dalam proyek yang berbeda, atau mungkin proyek yang sama. Untuk melakukannya, terapkan teknik Direktif Baca-Saja yang dijelaskan di atas ke kedua .RC file. Dalam kasus di mana dua .RC file tersebut untuk aplikasi yang berbeda (proyek yang berbeda), hasilnya diilustrasikan dalam diagram berikut:

     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

Kasus di mana file header kedua dibagikan oleh dua .RC file dalam aplikasi yang sama (proyek) dibahas di bawah ini.

Menggunakan beberapa file sumber daya dalam proyek yang sama

Visual C++ dan Resource Compiler mendukung beberapa .RC file dalam proyek yang sama melalui #include arahan yang menyertakan satu .RC file dalam file lain. Beberapa bersarang diperbolehkan. Ada berbagai alasan untuk membagi sumber daya proyek Anda menjadi beberapa .RC file:

  • Lebih mudah untuk mengelola sejumlah besar sumber daya di antara beberapa anggota tim proyek jika Anda membagi sumber daya menjadi beberapa .RC file. Jika Anda menggunakan paket manajemen kontrol sumber untuk memeriksa file dan memeriksa perubahan, memisahkan sumber daya menjadi beberapa .RC file akan memberi Anda kontrol yang lebih baik atas mengelola perubahan pada sumber daya.

  • Jika Anda ingin menggunakan direktif pra-prosesor, seperti #ifdef, , #endifdan #define, untuk bagian sumber daya Anda, Anda harus mengisolasinya dalam sumber daya baca-saja yang akan dikompilasi oleh Pengkompilasi Sumber Daya.

  • File komponen .RC akan memuat dan menyimpan lebih cepat di Visual C++ daripada satu file komposit .RC .

  • Jika Anda ingin mempertahankan sumber daya dengan editor teks dalam bentuk yang dapat dibaca manusia, Anda harus memisahkannya dalam .RC file dari satu pengeditan Visual C++.

  • Jika Anda perlu menyimpan sumber daya yang ditentukan pengguna dalam bentuk biner atau teks yang dapat ditafsirkan oleh editor data khusus lainnya, maka Anda harus menyimpannya dalam file terpisah .RC sehingga Visual C++ tidak mengubah format menjadi data heksadesimal. Sumber .WAV daya file (suara) dalam sampel Konsep Lanjutan MFC SPEAKN adalah contoh yang baik.

Anda dapat menyertakan SECOND.RC di Direktif Waktu Kompilasi dalam kotak dialog Atur Menyertakan:

#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

Hasilnya diilustrasikan dalam diagram berikut:

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

Dengan Menggunakan Compile-Time Directives, Anda dapat mengatur sumber daya Visual C++-yang dapat diedit dan tidak dapat diedit ke dalam beberapa .RC file, di mana yang utama MYAPP.RC tidak melakukan apa pun kecuali #include file lainnya .RC . Jika Anda menggunakan file proyek .MAK Visual Studio C++, maka Anda harus menyertakan file utama .RC dalam proyek sehingga semua sumber daya yang disertakan dikompilasi dengan aplikasi Anda.

Penerapan file Visual C++ yang tidak dapat diedit

File yang dibuat RES\MYAPP.RC2 AppWizard adalah contoh file yang berisi sumber daya yang tidak ingin Anda baca secara tidak sengaja ke Visual C++ lalu tulis kembali dengan kehilangan informasi pemformatan. Untuk melindungi dari masalah ini, tempatkan baris berikut di awal RES\MYAPP.RC2 file:

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

Ketika Visual C++ mengkompilasi .RC file, itu mendefinisikan dan APSTUDIO_INVOKEDRC_INVOKED. Jika struktur file yang dibuat AppWizard rusak dan Visual C++ membaca baris #error di atas, ia melaporkan kesalahan fatal dan membatalkan pembacaan .RC file.

Mengelola simbol yang dibagikan oleh beberapa file Visual C++-edited .RC

Dua masalah muncul saat Anda membagi sumber daya menjadi beberapa .RC file yang ingin Anda edit secara terpisah di Visual C++:

  • Anda mungkin ingin berbagi simbol yang sama di beberapa .RC file.

  • Anda perlu membantu Visual C++ menghindari penetapan nilai numerik ID yang sama ke sumber daya (simbol) yang berbeda.

Diagram berikut mengilustrasikan organisasi .RC file dan .H yang menangani masalah pertama:

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

Dalam contoh ini, sumber daya string disimpan dalam satu file sumber daya, MYSTRS.RC, dan menu disimpan di yang lain, MYMENUS.RC. Beberapa simbol, seperti untuk perintah, mungkin perlu dibagikan di antara dua file. Misalnya, ID_TOOLS_SPELL mungkin ID perintah menu untuk item Ejaan di menu Alat; dan mungkin juga ID string dari prompt perintah yang ditampilkan oleh kerangka kerja di bilah status jendela utama aplikasi.

Simbol ID_TOOLS_SPELL disimpan dalam file header bersama, MYSHARED.H. Anda mempertahankan file header bersama ini secara manual dengan editor teks; Visual C++ tidak langsung mengeditnya. Dalam dua file MYSTRS.RC sumber daya dan MYMENUS.RC, Anda menentukan #include "MYSHARED.H" di Direktif Baca-Saja untuk MYAPP.RC, menggunakan perintah Termasuk Sumber Daya, seperti yang dijelaskan sebelumnya.

Paling mudah untuk mengantisipasi simbol yang akan Anda bagikan sebelum mencoba menggunakannya untuk mengidentifikasi sumber daya apa pun. Tambahkan simbol ke file header bersama dan, jika Anda belum menyertakan file header bersama dalam Direktif Baca-Saja untuk .RC file, lakukan sebelum menggunakan simbol . Jika Anda tidak mengantisipasi berbagi simbol dengan cara ini, maka Anda harus secara manual (menggunakan editor teks) memindahkan pernyataan #define untuk simbol dari, katakanlah, MYMENUS.H hingga MYSHARED.H sebelum menggunakannya di MYSTRS.RC.

Saat mengelola simbol dalam beberapa .RC file, Anda juga harus membantu Visual C++ menghindari penetapan nilai numerik ID yang sama ke sumber daya (simbol) yang berbeda. Untuk file tertentu .RC , Visual C++ secara bertahap menetapkan ID di masing-masing dari empat domain ID. Di antara sesi pengeditan, Visual C++ melacak ID terakhir yang ditetapkannya di setiap domain di File Header Simbol untuk file tersebut .RC . Berikut adalah nilai APS_NEXT untuk file kosong (baru): .RC

#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 adalah nilai simbol berikutnya yang akan digunakan untuk sumber daya dialog, sumber daya menu, dan sebagainya. Rentang yang valid untuk nilai simbol sumber daya adalah 1 hingga 0x6FFF.

_APS_NEXT_COMMAND_VALUE adalah nilai simbol berikutnya yang akan digunakan untuk identifikasi perintah. Rentang yang valid untuk nilai simbol perintah 0x8000 ke 0xDFFF.

_APS_NEXT_CONTROL_VALUE adalah nilai simbol berikutnya yang akan digunakan untuk kontrol dialog. Rentang yang valid untuk nilai simbol kontrol dialog adalah 8 hingga 0xDFFF.

_APS_NEXT_SYMED_VALUE adalah nilai simbol berikutnya yang akan dikeluarkan saat Anda menetapkan nilai simbol secara manual menggunakan perintah Baru di Browser Simbol.

Visual C++ dimulai dengan nilai yang sedikit lebih tinggi yang nilai hukum terendah saat membuat file baru .RC . AppWizard juga akan menginisialisasi nilai-nilai ini ke sesuatu yang lebih sesuai untuk aplikasi MFC. Untuk informasi selengkapnya tentang rentang nilai ID, lihat Catatan Teknis 20.

Sekarang setiap kali Anda membuat file sumber daya baru, bahkan dalam proyek yang sama, Visual C++ menentukan nilai yang sama _APS_NEXT_ . Ini berarti bahwa jika Anda menambahkan, katakanlah, beberapa dialog dalam dua file yang berbeda .RC , kemungkinan besar nilai #define yang sama akan ditetapkan ke dialog yang berbeda. Misalnya, IDD_MY_DLG1 dalam file pertama .RC mungkin ditetapkan angka yang sama, 101, seperti IDD_MY_DLG2 dalam file kedua .RC .

Untuk menghindari masalah ini, Anda harus memesan rentang numerik terpisah untuk masing-masing dari empat domain ID dalam masing-masing .RC file. Atur rentang dengan memperbarui _APS_NEXT nilai secara manual di setiap .RC file sebelum Anda mulai menambahkan sumber daya. Misalnya, jika file pertama .RC menggunakan nilai default _APS_NEXT , maka Anda mungkin ingin menetapkan nilai berikut _APS_NEXT ke file kedua .RC :

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

Tentu saja, masih mungkin bahwa Visual C++ akan menetapkan begitu banyak ID dalam file pertama .RC sehingga nilai numerik mulai tumpang tindih dengan yang dicadangkan untuk file kedua .RC . Anda harus memesan rentang yang cukup besar sehingga tabrakan ini tidak terjadi.

Mengelola dependensi antara .RC, , .CPPdan .H file

Saat Visual C++ menyimpan .RC file, visual C++ juga menyimpan perubahan simbol ke file yang RESOURCE.H sesuai. Salah satu file Anda .CPP yang merujuk ke sumber daya dalam .RC file harus digunakan #include untuk menyertakan RESOURCE.H file, biasanya dari dalam file header utama proyek Anda. Penyertaan ini menyebabkan efek samping yang tidak diinginkan karena manajemen proyek internal lingkungan pengembangan, yang memindai file sumber untuk dependensi header. Setiap kali Anda menambahkan simbol baru di Visual C++, semua .CPP file yang memiliki #include "RESOURCE.H" arahan perlu dikompres ulang.

Visual C++, menghindari dependensi dengan RESOURCE.H menyertakan komentar berikut sebagai baris RESOURCE.H pertama file:

//{{NO_DEPENDENCIES}}

Lingkungan pengembangan menginterpretasikan komentar ini dengan mengabaikan perubahan RESOURCE.H sehingga file dependen .CPP tidak perlu dikompilasi ulang.

Visual C++ selalu menambahkan //{{NO_DEPENDENCIES}} baris komentar ke .RC file saat menyimpan file. Dalam beberapa kasus, menghindari dependensi build pada RESOURCE.H dapat menyebabkan kesalahan run-time yang tidak terdeteksi pada waktu tautan. Misalnya, jika Anda menggunakan Browser Simbol untuk mengubah nilai numerik yang ditetapkan ke simbol untuk sumber daya, sumber daya tidak akan ditemukan dan dimuat dengan benar pada run-time aplikasi jika .CPP file yang mengacu pada sumber daya tidak dikompresi ulang. Dalam kasus seperti itu, Anda harus secara eksplisit mengkompilasi ulang file apa pun .CPP yang Anda ketahui dipengaruhi oleh perubahan simbol di RESOURCE.H atau pilih Bangun Ulang Semua. Jika Anda memiliki kebutuhan untuk sering mengubah nilai simbol untuk sekelompok sumber daya tertentu, Anda mungkin akan merasa lebih nyaman dan lebih aman untuk memecah simbol-simbol ini menjadi file header baca-saja terpisah, seperti yang dijelaskan di bagian di atas Termasuk File Header Tambahan.

Cara Visual C++ mengelola informasi Set Includes

Seperti yang dibahas di atas, perintah Set Set File Menyertakan memungkinkan Anda menentukan tiga jenis informasi:

  • File Header Simbol

  • Direktif Simbol Baca-Saja

  • Direktif Waktu Kompilasi

Tabel berikut ini menjelaskan bagaimana Visual C++ mempertahankan informasi ini dalam .RC file. Anda tidak memerlukan informasi ini untuk menggunakan Visual C++, tetapi dapat meningkatkan pemahaman Anda sehingga Anda dapat lebih percaya diri menggunakan fitur Set Includes.

Masing-masing dari tiga jenis Set Menyertakan informasi di atas disimpan dalam file dalam .RC dua bentuk: (1) sebagai #include atau arahan lain yang dapat ditafsirkan oleh Pengkompilasi Sumber Daya, dan (2) sebagai sumber daya khusus TEXTINCLUDE hanya dapat ditafsirkan oleh Visual C++.

Tujuan TEXTINCLUDE sumber daya adalah untuk menyimpan dengan aman Atur Sertakan informasi dalam formulir yang mudah disajikan dalam kotak dialog Atur Visual C++'s Menyertakan . TEXTINCLUDEadalah jenis sumber daya yang ditentukan oleh Visual C++. Visual C++ mengenali tiga sumber daya tertentu TEXTINCLUDE yang memiliki nomor identifikasi sumber daya 1, 2 dan 3:

TEXTINCLUDE ID sumber daya Jenis Set Menyertakan informasi
1 File Header Simbol
2 Direktif Simbol Baca-Saja
3 Direktif Waktu Kompilasi

Masing-masing dari tiga jenis informasi Set Includes diilustrasikan oleh default MYAPP.RC dan RESOURCE.H file yang dibuat oleh AppWizard, seperti yang dijelaskan di bawah ini. Tambahan \0 dan "" token antara BEGIN dan END blok diperlukan oleh sintaks RC untuk menentukan string nol yang dihentikan dan karakter kutipan ganda masing-masing.

File Header Simbol

Bentuk informasi File Header Simbol yang ditafsirkan oleh Pengkompilasi Sumber Daya hanyalah #include pernyataan:

#include "resource.h"

Sumber daya yang TEXTINCLUDE sesuai adalah:

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

Direktif Simbol Baca-Saja

Direktif Simbol Baca-Saja disertakan di bagian MYAPP.RC atas dalam bentuk berikut yang dapat ditafsirkan oleh Pengkompilasi Sumber Daya:

#include "afxres.h"

Sumber daya yang TEXTINCLUDE sesuai adalah:

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

Direktif Waktu Kompilasi

Compile-Time Directives disertakan di akhir MYAPP.RC formulir berikut yang dapat ditafsirkan oleh Pengkompilasi Sumber Daya:

#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

Direktif #ifndef APSTUDIO_INVOKED menginstruksikan Visual C++ untuk melewati Compile-Time Directives.

Sumber daya yang TEXTINCLUDE sesuai adalah:

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

Baca juga

Catatan Teknis menurut Angka
Catatan Teknis menurut Kategori