Port MFC proyek Visual C++ .NET atau Visual C++ 2005 perubahan pada sistem operasi target

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 320479
Gejala
Ketika Anda port proyek kelas dasar Microsoft (MFC) yang dibuat dengan menggunakan Microsoft Visual C++ 6.0 untuk Microsoft Visual C++ .NET atau Microsoft Visual C++ 2005 dan kemudian membangun proyek Microsoft Visual Studio .NET, baru biner gagal dengan cara yang berbeda ketika Anda menjalankan proyek pada Microsoft Windows NT 4.0. Ketika Anda membangun proyek di Visual C++ 6.0, berkas sumber sama membangun biner yang berjalan tanpa galat pada Windows NT.
Penyebab
Kode yang dihasilkan oleh Wisaya di versi sebelumnya Visual C++ tidak menetapkan nilai untuk _WIN32_WINNT di Stdafx.h. Proyek MFC baru di Visual Studio .NET menjelaskan _WIN32_WINNT untuk pengaturan standar 0x0400 target Windows NT 4.0 dan versi sistem operasi.

Konversi tidak mengubah berkas sumber, tetapi proyek baru menggunakan file header MFC baru untuk Visual C++ .NET atau Visual C++ 2005. Jika _WIN32_WINNT tidak ditetapkan secara eksplisit di berkas Stdafx.h lama, termasuk MFC header menetapkan _WIN32_WINNT untuk Anda.

Pernyataan
#include <afxwin.h>
akhirnya termasuk Afxv_w32.h. Header ini menetapkan _WIN32_WINNT (jika tidak sudah ditetapkan) harus sama dengan WINVER. Dalam Visual C++ .NET atau Visual C++ 2005, WINVER ditetapkan secara eksplisit di Windows.h 0x0501. Pengaturan ini target sistem operasi Microsoft Windows 2000 dan sistem operasi Microsoft Windows XP, dan menciptakan struktur definisi yang Windows NT 4.0 dan sebelumnya tidak dikenal.
Pemecahan masalah
Untuk mengatasi masalah ini, tambahkan setidaknya baris kode berikut di awal Stdafx.h berkas proyek dikonversi:
#define _WIN32_WINNT 0x0400
Verifikasi bahwa kode ini ditambahkan sebelum MFC header file disertakan.

Untuk solusi yang lebih lengkap, membuat proyek MFC asali baru di versi Visual C++ .NET atau Visual C++ 2005, dan kemudian tempelkan kode Stdafx.h yang dibuat dengan Visual C++ .NET atau Visual C++ 2005 proyek default sebelum baris kode berikut ini:
#include <afxwin.h>				
Resolusi ini dapat membantu Anda untuk mengatasi masalah lainnya. Kode berikut dibuat dengan versi terbaru Visual C++ .NET atau Visual C++ 2005 sebagai tulisan ini:
// Stdafx.h : Include file for standard system include files,// or project specific include files that are used frequently,// but are changed infrequently.#pragma once#ifndef VC_EXTRALEAN#define VC_EXTRALEAN	// Exclude rarely-used items from Windows headers.#endif// Modify the following defines if you have to target an OS before the ones // specified in the following code. See MSDN for the latest information// about corresponding values for different operating systems.#ifndef WINVER		// Permit use of features specific to Windows 95 and Windows NT 4.0 or later.#define WINVER 0x0400	// Change this to the appropriate value to target #endif                     // Windows 98 and Windows 2000 or later.#ifndef _WIN32_WINNT	// Permit use of features specific to Windows NT 4.0 or later.#define _WIN32_WINNT 0x0400	// Change this to the appropriate value to target #endif		         // Windows 98 and Windows 2000 or later.			#ifndef _WIN32_WINDOWS	      // Permit use of features specific to Windows 98 or later.#define _WIN32_WINDOWS 0x0410    // Change this to the appropriate value to target #endif			      // Windows Millennium Edition or later.#ifndef _WIN32_IE		// Permit use of features specific to Internet Explorer 4.0 or later.#define _WIN32_IE 0x0400   // Change this to the appropriate value to target #endif			// Internet Explorer 5.0 or later.#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS  // Some CString constructors will be explicit.// Turns off MFC feature that hides of some common warning messages// that are frequently and safely ignored .#define _AFX_ALL_WARNINGS				
Informasi lebih lanjut
Perilaku ini dapat menyebabkan masalah untuk panggilan API yang mengambil struktur yang mungkin memiliki fitur yang lebih baru ditambahkan untuk sistem operasi yang lebih baru. Contoh umum dari masalah ini terjadi ketika kotak dialog umum tidak membuka. Sebagai contoh, OPENFILENAME struktur definisi memiliki anggota yang dikenali di Windows 2000 dan yang lebih baru, namun tidak dikenali di Windows NT 4.0.

Langkah-langkah untuk mereproduksi perilaku

Untuk mereproduksi masalah, ikuti langkah berikut:
  1. Dalam Visual C++ 6.0 membuat proyek MFC default.
  2. Buka kotak dialog tentang , dan kemudian klik ganda tombol tekan OK ; menerima nama OnOK .
  3. Menambahkan kode sampel berikut dalam fungsi OnOK :
    CFileDialog	Dlg(TRUE);Dlg.DoModal();					
  4. Membuat proyek, kemudian menjalankan proyek di komputer yang menjalankan Windows NT 4.0.
  5. Pada menu bantuan , klik tentang, dan kemudian klik OK.
  6. Visual C++ .NET membuka proyek yang sama. Untuk menerima penawaran untuk mengubah proyek, klik ya.
  7. Ulangi langkah 4 dan 5 dengan biner baru.
Hasil berbeda untuk sistem operasi yang berbeda.
  • Di komputer yang menjalankan Windows NT 4.0, saat Anda memulai program yang mencakup biner yang dibuat dalam Visual C++ 6.0, dan kemudian klik buka di menu berkas , ditampilkan kotak dialog buka .
  • Ketika Anda memulai program yang menyertakan biner yang dibangun di VC ++ .NET dari sumber yang sama, kotak dialog tidak muncul. Namun, versi program berfungsi sebagai pada komputer yang menjalankan Windows 2000 dan yang lebih baru.
Referensi
Untuk informasi selengkapnya, kunjungi situs web Microsoft Developer Network (MSDN) berikut:
dialog commondialog "umum dialog umum" dialog "fileopen filesave openfiledialog

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 320479 - Tinjauan Terakhir: 07/03/2016 12:37:00 - Revisi: 3.0

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbmigrate kbprb kbmt KB320479 KbMtid
Tanggapan