Bagikan melalui


Panduan Porting: Coretan MFC

Topik ini adalah topik pertama dari beberapa topik yang memperkenalkan Anda pada prosedur peningkatan untuk proyek Visual Studio C++ yang dibuat di versi Visual Studio yang lebih lama ke Visual Studio 2017. Topik-topik ini memperkenalkan proses peningkatan berdasarkan contoh, dimulai dengan proyek yang sangat sederhana dan pindah ke yang sedikit lebih kompleks. Dalam topik ini, kami bekerja melalui proses peningkatan untuk proyek tertentu, MFC Scribble. Ini cocok sebagai pengenalan dasar untuk proses peningkatan untuk proyek C++.

Setiap versi Visual Studio memperkenalkan kemungkinan ketidaksesuaian yang dapat mempersulit pemindahan kode dari versi Visual Studio yang lebih lama ke yang lebih baru. Terkadang perubahan yang diperlukan ada dalam kode Anda, jadi Anda harus mengkompilasi ulang dan memperbarui kode Anda, dan terkadang perubahan yang diperlukan adalah pada file proyek. Saat Anda membuka proyek yang dibuat dengan versi Visual Studio sebelumnya, Visual Studio secara otomatis menanyakan apakah akan memperbarui proyek atau solusi ke versi terbaru. Alat-alat ini biasanya hanya meningkatkan file proyek; mereka tidak mengubah kode sumber Anda.

Coretan MFC

MFC Scribble adalah sampel terkenal yang telah disertakan dalam berbagai rilis Visual C++. Ini adalah aplikasi gambar sederhana yang menggambarkan beberapa fitur dasar MFC. Ada berbagai versi yang tersedia, termasuk versi kode terkelola dan asli. Untuk contoh ini, kami menemukan versi lama Scribble dalam kode asli dari Visual Studio 2005 dan membukanya di Visual Studio 2017.

Sebelum mencoba memutakhirkan, pastikan Anda telah menginstal beban kerja Windows Desktop. Buka alat penginstal Visual Studio (vs_installer.exe). Salah satu cara untuk membuka alat penginstal adalah dengan memilih File>Proyek Baru dan menggulir ke bagian bawah daftar templat yang diinstal hingga Anda melihat Buka Penginstal Visual Studio. Setelah membuka alat penginstal, Anda akan melihat semua beban kerja yang tersedia. Jika kotak untuk beban kerja Windows Desktop tidak dipilih, pilih dan klik tombol Ubah di bagian bawah jendela.

Selanjutnya, cadangkan seluruh solusi dan semua kontennya.

Terakhir, buka solusi di Visual Studio versi terbaru dan izinkan wizard untuk mengonversi proyek.

Perhatikan bahwa Anda juga dapat menjalankan devenv di baris perintah, menggunakan /Upgrade opsi , alih-alih menggunakan wizard untuk meningkatkan proyek Anda. Lihat /Tingkatkan (devenv.exe). Itu bisa membantu dalam mengotomatiskan proses peningkatan untuk sejumlah besar proyek.

Langkah 1. Mengonversi File Proyek

Saat Anda membuka file proyek lama di Visual Studio, Visual Studio menawarkan untuk mengonversi file proyek ke versi terbaru, yang kami terima. Kotak dialog berikut muncul:

Tinjau dialog Perubahan Proyek dan Solusi.

Terjadi kesalahan yang memberi tahu kami bahwa target Itanium tidak tersedia dan tidak akan dikonversi.

Platform 'Itanium' is missing from this project. All the configurations and their file configuration settings specific to this platform will be ignored. If you want this platform converted, please make sure you have the corresponding platform installed under '%vctargetpath%\platforms\Itanium'. Continue to convert this project without this platform?

Pada saat proyek Scribble sebelumnya dibuat, Itanium adalah platform target penting. Platform Windows tidak lagi mendukung Itanium, jadi kami memilih untuk melanjutkan tanpa mendukung platform Itanium.

Visual Studio kemudian menampilkan laporan migrasi yang mencantumkan semua masalah dengan file proyek lama.

Cuplikan layar Laporan Peningkatan.

Dalam hal ini, masalahnya adalah semua peringatan, dan Visual Studio membuat perubahan yang sesuai dalam file proyek. Perbedaan besar sejauh yang dikhawatirkan oleh proyek adalah bahwa alat build berubah dari vcbuild menjadi msbuild. Perubahan ini pertama kali diperkenalkan di Visual Studio 2010. Perubahan lain termasuk beberapa pengaturan ulang urutan elemen dalam file proyek itu sendiri. Tidak ada masalah yang diperlukan perhatian lebih lanjut untuk proyek sederhana ini.

Langkah 2. Mendapatkannya untuk membangun

Sebelum membangun, kami memeriksa toolset platform sehingga kami tahu versi kompilator apa yang digunakan sistem proyek. Dalam dialog properti proyek, di bawah Properti Konfigurasi, dalam kategori Umum , lihat properti Platform Toolset . Ini berisi versi Visual Studio dan nomor versi alat platform, yang dalam hal ini adalah v141 untuk alat versi Visual Studio 2017. Saat Anda mengonversi proyek yang awalnya dikompilasi dengan Visual Studio 2010, 2012, 2013, atau 2015, toolset tidak diperbarui secara otomatis ke toolset terbaru.

Untuk beralih ke Unicode, buka properti proyek, di bawah Properti Konfigurasi, pilih bagian Umum , dan temukan properti Set Karakter. Ubah ini dari Gunakan Set Karakter Multi-Byte untuk Menggunakan Set Karakter Unicode. Efek dari perubahan ini adalah bahwa sekarang makro _UNICODE dan UNICODE ditentukan dan tidak _MBCS, yang dapat Anda verifikasi dalam dialog properti di bawah kategori C/C++ di properti Baris Perintah.

/GS /analyze- /W4 /Zc:wchar_t /Zi /Gm- /Od /Fd".\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_AFXDLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX /Zc:forScope /Gd /Oy- /MDd /Fa".\Debug\" /EHsc /nologo /Fo".\Debug\" /Fp".\Debug\Scribble.pch" /diagnostics:classic

Meskipun proyek Scribble tidak disiapkan untuk dikompilasi dengan karakter Unicode, itu sudah ditulis dengan TCHAR alih-alih karakter, jadi tidak ada yang benar-benar perlu diubah. Proyek berhasil dibangun dengan set karakter Unicode.

Sekarang bangun solusinya. Di jendela output, pengkompilasi memberi tahu kami bahwa _WINNT32_WINNT tidak ditentukan:

_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)

Ini adalah peringatan, bukan kesalahan, dan sangat umum saat meningkatkan proyek Visual Studio C++. Ini adalah makro yang mendefinisikan versi windows terendah yang akan dijalankan aplikasi kami. Jika kita mengabaikan peringatan, kita menerima nilai default, _WIN32_WINNT_MAXVER, yang berarti versi Windows saat ini. Untuk tabel nilai yang mungkin, lihat Menggunakan Header Windows. Misalnya, kita dapat mengaturnya untuk dijalankan pada versi apa pun dari Vista dan seterusnya.

#define _WIN32_WINNT _WIN32_WINNT_VISTA

Jika kode menggunakan bagian dari Windows API yang tidak tersedia pada versi Windows yang Anda tentukan dengan makro ini, Anda akan melihat bahwa sebagai kesalahan pengkompilasi. Dalam kasus kode Scribble, tidak ada kesalahan.

Langkah 3. Pengujian dan penelusuran kesalahan

Tidak ada rangkaian pengujian, jadi kami baru saja memulai aplikasi, menguji fiturnya secara manual melalui UI. Tidak ada masalah yang diamati.

Langkah 4. Meningkatkan kode

Setelah bermigrasi ke Visual Studio 2017, Anda mungkin ingin membuat beberapa perubahan untuk memanfaatkan fitur C++ baru. Versi kompiler C++ saat ini jauh lebih sesuai dengan standar C++ versi sebelumnya, jadi jika Anda memiliki pikiran untuk membuat beberapa perubahan kode untuk membuat kode Anda lebih aman, dan lebih portabel untuk kompilator dan sistem operasi lainnya, Anda harus mempertimbangkan beberapa peningkatan.

Langkah berikutnya

Coretan adalah aplikasi desktop Windows kecil dan sederhana, dan tidak sulit untuk dikonversi. Banyak aplikasi kecil dan sederhana yang mengonversi dengan mudah ke versi baru. Untuk aplikasi yang lebih kompleks, dengan lebih banyak baris kode, kode warisan lama yang mungkin tidak sesuai dengan standar rekayasa modern, beberapa proyek dan pustaka, langkah build kustom, atau untuk build otomatis berskrip kompleks, akan membutuhkan lebih banyak waktu untuk meningkatkan. Lanjutkan dengan contoh berikutnya, aplikasi ATL/COM yang disebut COM Spy.

Lihat juga

Porting dan Peningkatan: Contoh dan Studi Kasus
Contoh Berikutnya: COM Spy