Mengapa beberapa API Win16 lama masih didukung di versi Windows yang lebih baru?

Saya baru-baru ini memperbaiki beberapa IAT pada MoleBox yang dikemas dapat dieksekusi dan melihatnya terhubung dengan fungsi kernel32: '_lopen', '_lwrite' dan '_lread'. situs ini menyatakan bahwa API tersebut disediakan untuk kompatibilitas dengan Windows versi 16-bit. Saya mengerti bahwa aplikasi 'Win16' tidak dapat dijalankan dalam mode panjang (ya - saya menjalankan Win8.1 x64) - jadi apa tujuannya agar tetap disertakan dalam 'kernel32.dll'?

Ngomong-ngomong, fungsi-fungsi itu bahkan tidak disertakan dalam perpustakaan 'msdn'.

EDIT: Tampaknya fungsi itu sebenarnya bukan 16-bit! Mereka mengambil parameter 32-bit di tumpukan.


person AnArrayOfFunctions    schedule 08.01.2015    source sumber
comment
Tentu saja bukan 16 bit. kernel32.dll adalah modul 32 atau 64 bit. Selain itu, fakta bahwa suatu fungsi memerlukan parameter 32 bit tidak menjadikannya 32 bit.   -  person David Heffernan    schedule 08.01.2015
comment
Luangkan waktu untuk membaca arsip di blog Raymond Chen, tempat dia sering mendiskusikan kompatibilitas lama kode yang tetap ada.   -  person Ken White    schedule 08.01.2015
comment
Tentu saja, alasan utamanya adalah karena tidak ada gunanya tidak menyertakannya dan memaksa pemrogram untuk menulis ulang program lama mereka. Menerapkannya dalam 32-bit adalah hal yang sepele.   -  person Hans Passant    schedule 08.01.2015
comment
Cukup lucu tetapi tampaknya fungsi '16-bit' tersebut juga didukung dalam modul 64-bit! Ini tampak seperti alam semesta yang benar-benar baru bagi saya. Saya mungkin harus membuat pertanyaan baru - kapan menggunakan Win32 atau Win16 API.   -  person AnArrayOfFunctions    schedule 08.01.2015
comment
Saya pikir saya menjelaskan ini dalam jawaban saya. Saya kira saya tidak melakukan pekerjaan dengan cukup baik. Apa yang tidak kamu mengerti?   -  person David Heffernan    schedule 08.01.2015
comment
Jangan khawatir Bro saya mengerti semuanya.   -  person AnArrayOfFunctions    schedule 08.01.2015
comment
kapan menggunakan Win32 atau Win16 API - yang terakhir dimaksudkan untuk basis kode lama, Anda harus menggunakan Win32 API bila memungkinkan. Hanya karena Anda dapat menggunakan API yang sudah usang bukan berarti Anda harus, kecuali Anda memiliki persyaratan khusus (membutuhkan target Win3.1 dan yang lebih lama)   -  person raymai97    schedule 02.08.2019


Jawaban (2)


Bukan berarti fungsinya bisa dipanggil oleh aplikasi 16 bit. Jelas mereka tidak bisa karena mereka hidup dalam modul 32 bit dan 64 bit. Intinya adalah untuk memudahkan pengembang mengkompilasi program lama tanpa harus menulis ulang.

Sekarang, pada tahun 2015 tidak ada kebutuhan nyata untuk melayani pengembang yang memiliki program 16 bit yang ingin mereka kompilasi ulang. Hal ini mungkin tidak akan terjadi lagi pada tingkat yang signifikan. Namun jika kita memutar waktu ke 20 tahun yang lalu, hal ini benar-benar memprihatinkan. Dan karenanya MS menyertakan kruk yang kompatibel ini. Dan setelah dimasukkan, MS mungkin memutuskan untuk membiarkannya di sana agar tidak merusak kompatibilitas biner. MS berusaha keras untuk menghindari kerusakan program lama. Jika fungsi-fungsi ini dihilangkan, program apa pun yang mengandalkannya akan rusak.

person David Heffernan    schedule 08.01.2015

Microsoft tidak menghapus fungsi "hanya karena" sudah lama. Mereka akan menghapus fungsi-fungsi ini segera setelah memerlukan implementasi ulang, namun untuk saat ini diperlukan lebih sedikit usaha untuk mempertahankannya.

person MSalters    schedule 08.01.2015