Apakah data api? Menggunakan dan menyambung ke API platform beseller

Adakah anda mempunyai anjing. Tetapi dia tidak bercakap bahasa manusia. Walau bagaimanapun, dia dapat "memahami" dia melalui arahan yang diajar semasa proses latihan. Jika anda memberitahu anjing yang mengetahui arahan "selipar!" sesuatu seperti "Rexik, tolong bawa saya selipar saya dengan arnab kecil", dia mungkin akan mendengar nama itu, tetapi tidak akan membawa selipar itu. Jadi, API ialah satu set perintah yang anjing anda memahami anda dan melakukan apa yang anda perlukan. Ini sangat dipermudahkan untuk teko, tetapi intipatinya jelas, saya fikir.

API ialah bahasa, cara terkawal, untuk satu program komputer berkomunikasi dengan yang lain untuk bersama-sama melaksanakan beberapa tugas biasa, apabila satu program memenuhi permintaan yang lain. Antara Muka Pengaturcaraan Aplikasi (API) - Antara muka pengaturcaraan aplikasi.

Ini adalah analogi primitif untuk boneka yang dilahirkan begitu sahaja.

Bayangkan 5 orang asing bercakap bahasa yang berbeza yang perlu bekerja dan tinggal bersama, katakan di Rusia. Kedua-dua mereka tidak tahu bahasa orang lain, tetapi mereka perlu melaksanakan beberapa tugas sebagai satu pasukan, dalam peranan, sebagai contoh, memberi makan antara satu sama lain dan membincangkan rasa makanan dalam bahasa Rusia. Untuk melakukan ini, anda perlu membeli barangan runcit, memasak makanan, menetapkan meja dan membincangkan hidangan semasa makan. Supaya mereka memahami satu sama lain dan boleh mencari produk di dunia luar, kami akan mengajar mereka set asas perkataan Rusia. Mari bayangkan apa yang kita ada:

1. Orang Perancis

2. Orang Sepanyol

4. orang Inggeris

5. Itali

Mari kita agihkan peranan antara mereka untuk melaksanakan subtugas seperti berikut:

Membeli Makanan: Perancis dan Sepanyol

Masakan: Sepanyol, Jerman dan Inggeris

Tetapan Jadual: Bahasa Inggeris dan Itali

Hidangan dan perbincangan rasa Hidangan: SEMUA

Agar mereka dapat menyelesaikan semua tugasan ini, kami akan mengajar semua orang satu set perkataan Rusia yang akan membolehkan mereka, dengan kerjasama antara satu sama lain dan persekitaran luaran, untuk menyelesaikan semua tugasan ini. Lihat gambar di bawah.

Jadi begini. Kumpulan rakan asing kita ialah kumpulan program komputer yang perlu berkomunikasi antara satu sama lain dan dengan persekitaran luaran.

Bahasa dan Perkataan yang menunjukkan produk dan tindakan asas yang perlu dihasilkan ini adalah API– piawaian yang digunakan oleh rakan asing kita berkomunikasi antara satu sama lain dalam bahasa Rusia untuk menyelesaikan semua subtugas yang diberikan.

API 1: Perkataan untuk Produk dan Tempat Beli
API 2: Perkataan untuk Hidangan dan Kaedah Memasak
API 3: Perkataan yang menunjukkan Peranti dan Tindakan dengannya
API 4: Perkataan yang menunjukkan Rasa dan Penilaian Makanan

Ia boleh menjadi lebih rumit, sebagai contoh, biarkan API 2 menjadi Turki, API 3 menjadi Cina, API 4 menjadi Hindi

Contoh untuk boneka:

1. Ada outlet. Di belakangnya terdapat sejumlah besar teknologi. Tetapi untuk menggunakannya, anda perlu mempunyai palam dengan jarak antara rod 3cm dan soket akan membekalkan 220V. Ini adalah antara muka API sistem pengeluaran elektrik yang besar.

2. Adakah terdapat seterika? Dia mempunyai sistem kerjanya sendiri yang kompleks. Tetapi untuk berfungsi dengan soket, ia mematuhi keperluan API - anda memerlukan palam dengan jarak 3 cm dan sebagai tindak balas menjangkakan 220 volt.

Itu sahaja. 2 sistem adalah bebas, ia adalah besar dan kompleks. Tetapi API dibuat untuk membuat perhubungan antara satu sama lain semudah mungkin.

API - antara muka pengaturcaraan aplikasi. Ini ialah set fungsi tertentu, pemalar, kelas dan, mungkin, objek lain untuk interaksi dengan sekeping program tertentu.

Saya fikir cara yang paling jelas ialah menerangkannya dengan contoh. Katakan seseorang menulis kalkulator yang anda ingin gunakan dalam program anda. Kalkulator ini perlu diakses entah bagaimana. Cara berinteraksi dengan kalkulator ini akan dipanggil API. Mereka boleh berbeza, dan tanpa penerangan mereka tiada apa yang boleh dilakukan. Mungkin anda akan mempunyai fungsi untuk menulis nombor ke dalam ingatan, satu lagi untuk melakukan tindakan, dan satu lagi untuk mendapatkan hasilnya. Atau mungkin anda akan mempunyai satu fungsi yang akan menghantar dua nombor dan kod operasi di antara mereka, dan segera mengembalikan jawapannya.

Penerangan sedemikian dibuat untuk segala-galanya. Sistem pengendalian mempunyai API, ini adalah satu set fungsi dengan mana program dicipta: mewujudkan sambungan rangkaian, melukis tetingkap, memproses klik butang. Untuk mana-mana pelayan, API ialah satu set fungsi yang dilaksanakannya. Penyemak imbas mengakses tapak Wikipedia - ia menggunakan API untuk mengembalikan respons kepada permintaan anda.

Mengikut definisi dari Wikipedia, API ialah satu set kelas, prosedur, fungsi, struktur dan pemalar siap sedia yang disediakan oleh aplikasi (perpustakaan, perkhidmatan) untuk digunakan dalam produk perisian luaran. Digunakan oleh pengaturcara untuk menulis semua jenis aplikasi.

Tetapi oleh kerana kebanyakan Wikipedia tidak dapat difahami oleh ramai orang, saya akan cuba menerangkan dalam istilah orang awam apa itu API dan untuk apa ia biasanya dibuat dan bagaimana ia digunakan.

API adalah berbeza sama sekali, tetapi sebagai contoh, saya memilih situasi di mana kami mempunyai rangkaian kedai dan hanya satu pangkalan data biasa. Bayangkan anda memiliki program gabungan. Program gabungan berfungsi berdasarkan prinsip berikut: seseorang mendaftar dalam program gabungan dan menerima enjin kedai. Kemudian dia boleh memasang kedai ini pada hostingnya dan mula bekerja. Tetapi semua data di kedai ini diambil dari pangkalan data kami, iaitu, kami perlu memberikan setiap rakan kongsi akses kepada pangkalan data berharga kami. Bolehkah anda bayangkan betapa bahayanya ini? Lagipun, kita perlu membuka akses kepada pangkalan data dari luar supaya semua kedai rakan kongsi boleh bekerja dengannya. Apa yang berlaku jika data capaian anda jatuh ke tangan penjenayah?

Di sinilah API akan membantu kami. Daripada memberikan akses kepada pangkalan data, kami hanya akan membuat API yang melaluinya kedai rakan kongsi akan menerima maklumat. Dengan cara ini, hanya skrip API kami akan berfungsi dengan pangkalan data dan kedai akan berfungsi dengan skrip ini.

Bagaimana ia berfungsi?
Sebagai contoh, kedai menghantar permintaan kepada API kami
http://ourapi.com/get_books?limit=20
dan API kami memahami bahawa ia perlu memberikan senarai buku yang terdiri daripada 20 salinan, kerana kami melepasi parameter had bersamaan dengan 20. Skrip (API) kami membuat permintaan kepada pangkalan data, menerima senarai buku dan mengembalikannya ke simpan (sebenarnya, ia hanya memaparkan ) dalam format tertentu. Format di mana API mengembalikan maklumat boleh menjadi apa sahaja, perkara utama ialah kedai kami memahaminya. Ini boleh jadi JSON, tatasusunan bersiri atau XML. Ini tidak lagi penting, perkara utama ialah anda memahami prinsipnya.

Anda mentakrifkan set perintah yang API fahami sendiri. Contohnya, dalam kes kami, ini boleh menjadi arahan seperti mendapatkan senarai buku, mendapatkan senarai kategori, mendapatkan buku popular, mendapatkan buku baharu, dsb. Dengan cara ini, walaupun penyerang mendapat peluang untuk mengakses API kami, apa yang dia boleh lakukan ialah mendapatkan senarai buku, dan ini tidak menimbulkan sebarang ancaman kepada pangkalan data kami.

Saya harap saya dapat menerangkan apa itu API dengan contoh mudah. Jika anda mempunyai sebarang soalan, tanya mereka dalam komen atau di forum dan kami dengan senang hati akan membantu anda menyelesaikannya.

Sistem klasifikasi API untuk minyak motor () telah dicipta pada tahun 1969. Menurut sistem API, tiga kategori operasi (tiga baris) diwujudkan untuk tujuan dan kualiti minyak motor:
S (Perkhidmatan)- terdiri daripada kategori kualiti minyak motor untuk enjin petrol, dalam susunan kronologi.
C (Komersial)- terdiri daripada kategori kualiti dan tujuan minyak untuk enjin diesel, dalam susunan kronologi.
EC (Penjimatan Tenaga)- minyak penjimatan tenaga. Rangkaian baharu minyak berkualiti tinggi, terdiri daripada minyak kelikatan rendah, mudah mengalir yang mengurangkan penggunaan bahan api mengikut keputusan ujian pada enjin petrol.

Untuk setiap kelas baharu, huruf tambahan abjad diberikan. Minyak universal untuk enjin petrol dan diesel ditunjukkan oleh dua simbol kategori yang sepadan: simbol pertama adalah yang utama, dan yang kedua menunjukkan kemungkinan menggunakan minyak ini untuk jenis enjin yang berbeza. Contoh: API SM/CF.

Kelas kualiti API untuk enjin petrol

Kelas API SN– diluluskan pada 1 Oktober 2010.
Perbezaan utama antara API SN dan klasifikasi API sebelumnya ialah pengehadan kandungan fosforus untuk keserasian dengan sistem rawatan selepas gas ekzos moden, serta penjimatan tenaga yang komprehensif. Iaitu, minyak yang dikelaskan mengikut API SN akan lebih kurang sepadan dengan ACEA C2, C3, C4, tanpa pembetulan untuk kelikatan suhu tinggi.

kelas API SM– diluluskan pada 30 November 2004.
Minyak motor untuk enjin petrol moden (berbilang injap, pengecas turbo). Berbanding dengan kelas SL, minyak motor yang memenuhi keperluan API SM mesti mempunyai perlindungan yang lebih tinggi terhadap pengoksidaan dan haus pramatang bahagian enjin. Di samping itu, piawaian mengenai sifat minyak pada suhu rendah telah dinaikkan. Minyak motor kelas ini boleh disahkan mengikut kelas kecekapan tenaga ILSAC
Minyak motor yang memenuhi keperluan API SL, SM boleh digunakan dalam kes di mana pengeluar kereta mengesyorkan kelas SJ atau lebih awal.

Kelas API SL– minyak motor untuk enjin kereta yang dikeluarkan selepas tahun 2000.
Selaras dengan keperluan pengeluar kereta, minyak motor kelas ini digunakan dalam enjin berbilang injap, pengecas turbo yang berjalan pada campuran bahan api tanpa lemak yang memenuhi keperluan penjimatan alam sekitar dan tenaga moden yang meningkat. Minyak motor yang memenuhi keperluan API SL boleh digunakan dalam kes di mana pengeluar kereta mengesyorkan kelas SJ atau lebih awal.

Kelas API SJ– minyak motor untuk digunakan dalam enjin petrol bermula dari 1996.
Kelas ini menerangkan minyak motor yang digunakan dalam enjin petrol bermula dari tahun 1996. Minyak motor kelas ini bertujuan untuk digunakan dalam enjin petrol kereta penumpang dan kereta sukan, bas mini dan trak ringan, yang diselenggara mengikut keperluan pengeluar kereta. SJ mempunyai piawaian minimum yang sama seperti SH, ditambah keperluan tambahan untuk pembentukan karbon dan operasi suhu rendah. Minyak motor yang memenuhi keperluan API SJ boleh digunakan dalam kes di mana pengeluar kenderaan mengesyorkan kelas SH atau lebih awal.

Kelas API SH– minyak motor untuk enjin petrol bermula dari 1994.
Kelas ini telah diterima pakai pada tahun 1992 untuk minyak motor yang disyorkan sejak tahun 1993. Kelas ini dicirikan oleh keperluan yang lebih tinggi berbanding dengan kelas SG, dan telah dibangunkan sebagai pengganti kepada yang terakhir untuk meningkatkan sifat anti-karbon, antioksidan, anti-haus minyak. dan peningkatan perlindungan kakisan. Minyak motor kelas ini bertujuan untuk digunakan dalam enjin petrol kereta penumpang, bas mini dan trak ringan, mengikut cadangan pengeluarnya. Minyak motor kelas ini telah diuji mengikut keperluan Persatuan Pengilang Kimia (CMA). Minyak motor kelas ini boleh digunakan dalam kes di mana pengeluar kenderaan mengesyorkan kelas SG atau lebih awal.

Kelas API SG– minyak motor untuk enjin petrol bermula dari tahun 1989.
Direka untuk digunakan dalam enjin petrol kereta penumpang, bas mini dan trak ringan. Minyak motor kelas ini mempunyai ciri-ciri yang memberikan perlindungan yang lebih baik terhadap jelaga, pengoksidaan minyak dan haus enjin, berbanding dengan kelas sebelumnya, dan juga mengandungi bahan tambahan yang melindungi daripada karat dan kakisan bahagian enjin dalaman. Minyak motor kelas SG memenuhi keperluan minyak motor untuk enjin diesel API CC dan boleh digunakan di mana kelas SF, SE, SF/CC atau SE/CC disyorkan.

Kelas API SF- minyak motor untuk enjin petrol sejak 1980 (kelas usang).
Minyak motor ini digunakan dalam enjin petrol yang dihasilkan pada tahun 1980-1989, tertakluk kepada cadangan dan arahan pengeluar enjin. Ia memberikan kestabilan pengoksidaan yang dipertingkatkan, perlindungan yang lebih baik terhadap haus bahagian, berbanding dengan ciri asas minyak motor SE, serta perlindungan yang lebih dipercayai terhadap jelaga, karat dan kakisan. Minyak motor kelas SF boleh digunakan sebagai pengganti untuk kelas SE, SD atau SC sebelumnya.

kelas API SE- minyak motor untuk enjin petrol yang dikeluarkan sejak 1972 (kelas usang). Minyak motor ini digunakan dalam enjin petrol model 1972-79, serta beberapa model 1971. Perlindungan tambahan berbanding minyak motor SC dan SD dan boleh digunakan sebagai pengganti untuk kategori ini.

Kelas API SD- minyak motor untuk digunakan dalam enjin petrol sejak 1968 (kelas usang). Minyak motor kelas ini digunakan dalam enjin petrol kereta penumpang dan beberapa trak yang dihasilkan pada tahun 1968-70, serta beberapa model tahun 1971 dan kemudiannya. Perlindungan yang lebih baik berbanding minyak motor SC, juga digunakan hanya jika disyorkan oleh pengeluar enjin.

Kelas API SC- minyak motor untuk enjin petrol, bermula dari 1964 (kelas usang). Biasanya digunakan dalam enjin kereta penumpang dan beberapa trak yang dihasilkan pada tahun 1964-1967. Kurangkan deposit karbon suhu tinggi dan rendah, haus, dan juga melindungi daripada kakisan.

Kelas API SB- minyak motor untuk enjin petrol berkuasa rendah (kelas ketinggalan zaman). Minyak motor 30-an abad ke-20, yang memberikan perlindungan yang agak ringan terhadap haus dan pengoksidaan, serta perlindungan anti-karat galas dalam enjin yang dikendalikan dalam keadaan beban ringan. Minyak motor kelas ini hanya boleh digunakan jika ia disyorkan secara khusus oleh pengeluar enjin.

kelas API SA- minyak motor untuk enjin petrol dan diesel. Kelas minyak usang untuk digunakan dalam enjin lama yang beroperasi dalam keadaan dan mod di mana perlindungan bahagian dengan bantuan bahan tambahan tidak diperlukan. Minyak motor kelas ini hanya boleh digunakan jika ia disyorkan oleh pengeluar enjin.

Kelas kualiti API untuk enjin diesel

Kelas API CJ-4- sah mulai 1 Oktober 2006.
Kelas ini direka khusus untuk enjin bermuatan berat. Memenuhi piawaian pelepasan NOx dan bahan zarah utama untuk enjin 2007. Had diperkenalkan pada minyak CJ-4 untuk penunjuk tertentu: kandungan abu kurang daripada 1.0%, sulfur 0.4%, fosforus 0.12%.
Klasifikasi baharu ini memenuhi keperluan kategori API terdahulu CI-4 PLUS, CI-4, tetapi membawa perubahan ketara kepada keperluan sebagai tindak balas kepada keperluan enjin baharu yang memenuhi piawaian alam sekitar baharu 2007 dan model yang lebih baru.

Kelas API CI-4 (CI-4 PLUS)- kelas prestasi baharu minyak motor untuk enjin diesel. Berbanding dengan API CI-4, keperluan untuk kandungan jelaga tertentu, serta kemeruapan dan pengoksidaan suhu tinggi, ditingkatkan. Apabila diperakui dalam klasifikasi ini, minyak motor mesti diuji dalam tujuh belas ujian motor.

Kelas API CI-4- kelas ini diperkenalkan pada tahun 2002.
Minyak motor ini digunakan dalam enjin diesel moden dengan pelbagai jenis suntikan dan pengecasan super. Minyak motor yang sepadan dengan kelas ini mesti mengandungi bahan tambahan detergen-dispersant yang sesuai dan, berbanding dengan kelas CH-4, telah meningkatkan ketahanan terhadap pengoksidaan terma, serta sifat penyebaran yang lebih tinggi. Di samping itu, minyak motor sedemikian memberikan pengurangan ketara dalam sisa minyak enjin dengan mengurangkan kemeruapan dan mengurangkan penyejatan pada suhu operasi sehingga 370°C, di bawah pengaruh gas. Keperluan mengenai kebolehpam sejuk juga telah diperkukuh, hayat perkhidmatan kelegaan, toleransi dan pengedap enjin telah ditingkatkan dengan meningkatkan kecairan minyak motor.
Kelas API CI-4 telah diperkenalkan berhubung dengan kemunculan keperluan baharu yang lebih ketat untuk ketoksikan ekologi dan gas ekzos, yang dikenakan ke atas enjin yang dikeluarkan mulai 1 Oktober 2002.

Kelas API CH-4- berkuat kuasa mulai 1 Disember 1998.
Minyak motor kelas ini digunakan dalam enjin diesel empat lejang yang beroperasi dalam mod kelajuan tinggi dan mematuhi keperluan norma dan piawai ketoksikan gas ekzos yang diterima pakai pada tahun 1998.
Minyak motor API CH-4 memenuhi keperluan yang agak ketat bagi pengeluar enjin diesel Amerika dan Eropah. Keperluan kelas direka khusus untuk digunakan dalam enjin yang menggunakan bahan api berkualiti tinggi dengan kandungan sulfur tertentu sehingga 0.5%. Pada masa yang sama, berbeza dengan kelas API CG-4, sumber minyak motor ini kurang sensitif terhadap penggunaan bahan api diesel dengan kandungan sulfur lebih daripada 0.5%, yang sangat penting bagi negara-negara Amerika Selatan. , Asia dan Afrika.
Minyak enjin API CH-4 memenuhi keperluan yang meningkat dan mesti mengandungi bahan tambahan yang lebih berkesan menghalang haus injap dan pembentukan mendapan karbon pada permukaan dalaman. Boleh digunakan sebagai pengganti minyak motor API CD, API CE, API CF-4 dan API CG-4 mengikut cadangan pengeluar enjin.

Kelas API CG-4- kelas diperkenalkan pada tahun 1995.
Minyak motor kelas ini disyorkan untuk enjin diesel empat lejang bas, trak dan traktor jenis utama dan bukan talian utama, yang dikendalikan dalam keadaan beban tinggi, serta mod kelajuan tinggi. Minyak enjin API CG-4 sesuai untuk enjin yang menggunakan bahan api berkualiti tinggi dengan kandungan sulfur tertentu tidak lebih daripada 0.05%, serta untuk enjin yang tidak ada keperluan khas untuk kualiti bahan api (kandungan sulfur khusus boleh mencapai 0.5). % ).
Minyak motor yang diperakui dengan API CG-4 seharusnya lebih berkesan mencegah haus bahagian enjin dalaman, mendapan karbon pada permukaan dalaman dan omboh, pengoksidaan, berbuih dan pembentukan jelaga (sifat ini amat diperlukan untuk enjin bas dan traktor jarak jauh moden) .
Kelas API CG-4 telah dicipta berkaitan dengan kelulusan di Amerika Syarikat bagi keperluan dan piawaian baharu bagi ekologi dan ketoksikan gas ekzos (edisi 1994). Minyak motor kelas ini boleh digunakan dalam enjin yang kelas API CD, API CE dan API CF-4 disyorkan. Kelemahan utama yang mengehadkan penggunaan besar-besaran minyak motor kelas ini, contohnya di Eropah Timur dan Asia, adalah pergantungan ketara hayat minyak motor pada kualiti bahan api yang digunakan.

Kelas API CF-2 (CF-II)- minyak motor bertujuan untuk digunakan dalam enjin diesel dua lejang yang dikendalikan dalam keadaan yang teruk.
Kelas ini diperkenalkan pada tahun 1994. Minyak motor kelas ini biasanya digunakan dalam enjin diesel dua lejang yang beroperasi dalam keadaan beban berat. Minyak API CF-2 mesti mengandungi bahan tambahan yang memberikan perlindungan prestasi yang dipertingkatkan terhadap haus pada komponen enjin dalaman seperti silinder dan gelang. Di samping itu, minyak motor ini harus menghalang pengumpulan mendapan pada permukaan dalaman enjin (fungsi pembersihan yang lebih baik).
Minyak enjin yang diperakui oleh API CF-2 mempunyai sifat yang lebih baik dan boleh digunakan sebagai ganti minyak yang serupa terdahulu, tertakluk kepada pengesyoran pengeluar.

Kelas API CF-4- minyak motor untuk digunakan dalam enjin diesel empat lejang bermula dari tahun 1990.
Minyak motor kelas ini boleh digunakan dalam enjin diesel empat lejang, keadaan operasi yang dikaitkan dengan mod kelajuan tinggi. Untuk keadaan sedemikian, keperluan kualiti untuk minyak melebihi keupayaan kelas CE, jadi minyak motor CF-4 boleh digunakan dan bukannya minyak kelas CE (tertakluk kepada pengesyoran yang sesuai daripada pengeluar enjin).
Minyak motor API CF-4 mesti mengandungi bahan tambahan yang sesuai yang memberikan pengurangan kelesuan minyak, serta perlindungan terhadap mendapan karbon dalam kumpulan omboh. Tujuan utama minyak motor kelas ini adalah untuk menggunakannya dalam enjin diesel traktor tugas berat dan kenderaan lain yang digunakan untuk perjalanan jauh di lebuh raya.
Di samping itu, minyak motor sedemikian kadangkala diberikan kelas dwi API CF-4/S. Dalam kes ini, tertakluk kepada cadangan yang sesuai daripada pengeluar enjin, minyak motor ini juga boleh digunakan dalam enjin petrol.

Kelas API CF (CF-2, CF-4)- minyak motor untuk enjin diesel dengan suntikan tidak langsung. Kelas diperkenalkan dari tahun 1990 hingga 1994. Nombor yang dipisahkan oleh tanda sempang menunjukkan enjin dua atau empat lejang.
Kelas CF menerangkan minyak motor yang disyorkan untuk digunakan dalam enjin diesel dengan suntikan tidak langsung, serta jenis enjin diesel lain yang menggunakan bahan api pelbagai kualiti, termasuk yang mempunyai kandungan sulfur yang tinggi (contohnya, lebih daripada 0.5% daripada jumlah jisim. ).
Minyak motor yang diperakui CF mengandungi bahan tambahan untuk mengelakkan mendapan omboh, haus dan kakisan galas tembaga dengan lebih baik, yang penting untuk jenis enjin ini, dan boleh dipam secara konvensional atau melalui pengecas turbo atau pemampat. Minyak motor kelas ini boleh digunakan di mana kelas kualiti CD disyorkan.

Kelas API CE- minyak motor untuk digunakan dalam enjin diesel bermula dari tahun 1983 (kelas usang).
Minyak motor kelas ini bertujuan untuk digunakan dalam beberapa enjin pengecas turbo tugas berat, dicirikan oleh mampatan operasi yang meningkat dengan ketara. Penggunaan minyak sedemikian dibenarkan untuk enjin dengan kedua-dua kelajuan aci rendah dan tinggi.
Minyak enjin API CE disyorkan untuk enjin diesel berkelajuan rendah dan tinggi yang dikeluarkan sejak 1983, yang dikendalikan dalam keadaan beban tinggi. Tertakluk kepada cadangan yang sesuai daripada pengeluar enjin, minyak motor ini juga boleh digunakan dalam enjin yang disyorkan minyak motor kelas CD.

Kelas API CD-II- minyak motor untuk digunakan dalam enjin diesel tugas berat dengan kitaran operasi dua lejang (kelas usang).
Kelas ini diperkenalkan pada tahun 1985 untuk digunakan dalam enjin diesel dua lejang dan, sebenarnya, merupakan perkembangan evolusi kelas CD API sebelumnya. Tujuan utama penggunaan minyak motor tersebut adalah untuk menggunakannya dalam enjin diesel yang berat dan berkuasa, yang dipasang terutamanya pada jentera pertanian. Minyak motor kelas ini memenuhi semua piawaian operasi kelas CD sebelumnya; selain itu, keperluan untuk perlindungan enjin yang sangat berkesan terhadap jelaga dan haus telah meningkat dengan ketara.

Kelas CD API- minyak motor untuk enjin diesel berkuasa tinggi yang digunakan dalam jentera pertanian (kelas usang). Kelas ini diperkenalkan pada tahun 1955 untuk kegunaan biasa dalam sesetengah enjin diesel, kedua-duanya disedut secara semula jadi dan pengecas turbo, dengan peningkatan mampatan silinder, di mana perlindungan berkesan terhadap jelaga dan haus adalah amat penting. Minyak motor kelas ini boleh digunakan dalam kes di mana pengeluar enjin tidak mengenakan keperluan tambahan untuk kualiti bahan api (termasuk bahan api dengan kandungan sulfur yang tinggi).
Minyak motor CD API sepatutnya memberikan perlindungan yang lebih tinggi terhadap kakisan galas dan mendapan karbon suhu tinggi dalam enjin diesel berbanding kelas sebelumnya. Minyak motor dalam kelas ini sering dipanggil "Siri Caterpillar 3" kerana fakta bahawa ia memenuhi keperluan pensijilan Pelincir Superior (Siri 3) yang dibangunkan oleh syarikat traktor Caterpillar.

CC kelas API- minyak motor untuk enjin diesel yang dikendalikan dalam keadaan beban sederhana (kelas usang).
Kelas ini diperkenalkan pada tahun 1961 untuk digunakan dalam enjin tertentu, kedua-duanya disedut secara semula jadi dan pengecas turbo, yang dicirikan oleh peningkatan mampatan. Minyak motor kelas ini disyorkan untuk enjin yang dikendalikan dalam keadaan beban sederhana dan tinggi.
Selain itu, tertakluk kepada cadangan pengeluar enjin, minyak motor tersebut boleh digunakan dalam beberapa enjin petrol berkuasa.
Berbanding dengan kelas terdahulu, minyak motor API CC diperlukan untuk menyediakan tahap perlindungan yang lebih tinggi terhadap mendapan karbon suhu tinggi dan kakisan galas dalam enjin diesel, serta terhadap karat, kakisan dan mendapan karbon suhu rendah dalam enjin petrol.

kelas API SV- minyak motor untuk enjin diesel yang beroperasi di bawah beban sederhana (kelas usang).
Kelas ini telah diluluskan pada tahun 1949 sebagai pembangunan evolusi kelas SA menggunakan bahan api dengan kandungan sulfur yang tinggi tanpa keperluan kualiti khas. Minyak motor API SV juga bertujuan untuk digunakan dalam enjin supercharged yang dikendalikan dalam mod ringan dan sederhana. Kelas ini sering dirujuk sebagai "Lampiran 1 Minyak Motor," dengan itu menekankan pematuhan peraturan ketenteraan MIL-L-2104A Lampiran 1.

Kelas API CA- minyak motor untuk enjin diesel bermuatan ringan (kelas usang).
Minyak motor kelas ini bertujuan untuk digunakan dalam enjin diesel yang beroperasi dalam keadaan ringan dan sederhana pada bahan api diesel berkualiti tinggi. Selaras dengan cadangan pengeluar kereta, ia juga boleh digunakan dalam beberapa enjin petrol yang dikendalikan dalam keadaan sederhana.
Kelas ini digunakan secara meluas pada tahun 40-an dan 50-an abad yang lalu dan tidak boleh digunakan dalam keadaan moden melainkan ditentukan oleh pengeluar enjin.
Minyak motor API CA mesti mempunyai sifat yang memberikan perlindungan terhadap mendapan karbon pada gelang omboh, serta terhadap kakisan galas dalam enjin supercharged, yang mana tiada keperluan khas untuk kualiti bahan api yang digunakan.

Windows API - satu set fungsi sistem pengendalian

API singkatan kelihatan sangat misteri dan bahkan menakutkan kepada banyak pengaturcara baru. Malah, Antara Muka Pengaturcaraan Aplikasi (API) hanyalah beberapa set fungsi sedia yang boleh digunakan oleh pembangun aplikasi. Secara umum, konsep ini bersamaan dengan apa yang sebelum ini lebih kerap dipanggil perpustakaan subrutin. Walau bagaimanapun, API biasanya merujuk kepada kategori khas perpustakaan tersebut.

Semasa pembangunan hampir mana-mana aplikasi yang agak kompleks (MyApplication) untuk pengguna akhir, satu set fungsi dalaman khusus dibentuk yang digunakan untuk melaksanakan program khusus ini, yang dipanggil MyApplication API. Walau bagaimanapun, ia sering ternyata bahawa fungsi ini boleh digunakan dengan berkesan untuk mencipta aplikasi lain, termasuk oleh pengaturcara lain. Dalam kes ini, pengarang, berdasarkan strategi untuk mempromosikan produk mereka, mesti memutuskan soalan: adakah mereka membuka akses kepada set ini untuk pengguna luar atau tidak? Jika jawapannya ya, frasa "Pakej termasuk set terbuka fungsi API" muncul dalam perihalan pakej perisian sebagai ciri positif (tetapi kadangkala untuk wang tambahan).

Oleh itu, selalunya API merujuk kepada set fungsi yang merupakan sebahagian daripada satu aplikasi, tetapi juga tersedia untuk digunakan dalam program lain. Sebagai contoh, Excel, sebagai tambahan kepada antara muka pengguna akhir, mempunyai satu set fungsi API Excel yang boleh digunakan, khususnya, apabila membuat aplikasi menggunakan VB.

Sehubungan itu, API Windows ialah satu set fungsi yang merupakan sebahagian daripada sistem pengendalian itu sendiri dan pada masa yang sama boleh diakses oleh mana-mana aplikasi lain, termasuk yang ditulis menggunakan VB. Dalam hal ini, analogi dengan set gangguan sistem BIOS/DOS, yang sebenarnya merupakan API DOS, agak wajar.

Perbezaannya ialah julat fungsi API Windows, dalam satu pihak, jauh lebih luas berbanding dengan DOS, dan sebaliknya, ia tidak termasuk banyak alat untuk mengurus sumber komputer secara langsung yang tersedia untuk pengaturcara pada masa sebelumnya. OS. Di samping itu, panggilan ke API Windows dilakukan menggunakan panggilan prosedur biasa, dan panggilan ke fungsi DOS dilakukan melalui arahan pemproses khas yang dipanggil Interrupt.

Mengapa kita memerlukan Win API untuk pengaturcara VB?

Walaupun fakta bahawa VB mempunyai pelbagai jenis fungsi, dalam proses pembangunan yang lebih atau kurang serius didapati bahawa keupayaan mereka sering tidak mencukupi untuk menyelesaikan masalah yang diperlukan. Pada masa yang sama, pengaturcara pemula sering mula mengeluh tentang kekurangan VB dan berfikir tentang menukar alat, tidak mengesyaki bahawa komputer mereka mempunyai set alat yang besar dan mereka hanya perlu tahu cara menggunakannya.

Apabila membiasakan diri dengan Win API, didapati bahawa banyak fungsi VB terbina dalam tidak lebih daripada panggilan ke prosedur sistem yang sepadan, tetapi hanya dilaksanakan dalam bentuk sintaks bahasa tertentu. Dengan mengambil kira perkara ini, keperluan untuk menggunakan API ditentukan oleh pilihan berikut:

  1. Fungsi API yang dilaksanakan sepenuhnya sebagai fungsi VB terbina dalam. Walau bagaimanapun, kadangkala dalam kes ini adalah berguna untuk beralih kepada menggunakan API, kerana ini kadangkala boleh meningkatkan prestasi dengan ketara (khususnya, disebabkan ketiadaan transformasi yang tidak perlu bagi parameter yang diluluskan).
  2. Fungsi VB terbina dalam hanya melaksanakan kes khas bagi fungsi API yang sepadan. Ini adalah pilihan yang agak biasa. Sebagai contoh, fungsi CreateDirectory API mempunyai lebih banyak keupayaan daripada pengendali VB MkDir terbina dalam.
  3. Sebilangan besar fungsi API tidak mempunyai analog sama sekali dalam versi semasa bahasa VB. Sebagai contoh, anda tidak boleh memadam direktori menggunakan VB - untuk melakukan ini anda perlu menggunakan fungsi DeleteDirectory.

Ia juga harus ditekankan bahawa beberapa fungsi API (bahagian mereka dalam Win API adalah sangat kecil) tidak boleh dipanggil daripada program VB disebabkan oleh beberapa batasan bahasa, contohnya, disebabkan oleh ketidakupayaan untuk berfungsi dengan alamat memori. Tetapi dalam beberapa kes, teknik pengaturcaraan bukan remeh boleh membantu (khususnya, dalam kes alamat yang sama).

Pandangan peribadi pengarang adalah ini - bukannya mengembangkan fungsi terbina dalam VB dari versi ke versi, ia harus diberikan penerangan yang baik tentang fungsi API yang paling popular. Pada masa yang sama, saya ingin menasihati pembangun agar tidak menunggu versi baharu alat dengan fungsi yang diperluaskan muncul, tetapi untuk melihat dengan lebih dekat komposisi Win API sedia ada - kemungkinan besar keupayaan yang anda perlukan mungkin telah dilaksanakan dalam versi VB 1.0, dikeluarkan pada tahun 1991.

Bagaimana untuk belajar Win API

Ini bukan soalan yang mudah, memandangkan bilangan fungsi API Win32 dianggarkan kira-kira 10 ribu (tiada siapa yang tahu angka yang tepat, malah Microsoft).

VB (versi 4-6) termasuk fail yang menerangkan pengisytiharan Win API - WIN32API.TXT (kami akan memberitahu anda lebih lanjut tentang penggunaannya kemudian). Tetapi, pertama, dengan bantuannya, anda boleh mendapatkan maklumat tentang tujuan fungsi tertentu dan parameternya hanya dengan nama mnemonik yang digunakan, dan kedua, senarai fungsi dalam fail ini jauh dari lengkap. Pada satu masa (tujuh tahun lalu), VB 3.0 mempunyai fail bantuan khas yang menerangkan fungsi API Win16. Walau bagaimanapun, sudah dalam v.4.0 maklumat berguna ini dengan antara muka yang mudah hilang.

Maklumat komprehensif tentang API Win32 boleh didapati dalam bantuan Kit Pembangunan Perisian Platform, yang disertakan dalam CD Perpustakaan MSDN yang disertakan dengan Edisi Perusahaan VB 5.0 dan 6.0 dan Edisi Pembangun Office 2000. Walau bagaimanapun, mencari maklumat yang diperlukan di sana dan memahaminya bukanlah mudah. Apatah lagi semua penerangan di sana diberikan berkaitan dengan bahasa C.

Buku-buku pakar terkenal Amerika Daniel Appleman secara amnya diiktiraf di dunia untuk mempelajari pengaturcaraan API dalam persekitaran VB. Panduan Pengaturcara Asas Visual Dan Appleman untuk siri Windows API (untuk Win16, Win32, dan pelbagai versi VB) telah menjadi salah satu buku terlaris untuk pengaturcara VB sejak 1993. Buku Dan Appleman’s VB 5.0 Programmer’s Guide to the Win32 API, dikeluarkan pada tahun 1997, telah dibawa kepada pengarang dari Amerika Syarikat oleh seorang rakan yang menemuinya di kedai buku pertama sebuah bandar wilayah kecil.

Buku ini mempunyai lebih 1,500 muka surat panjang, meliputi teknik pengaturcaraan API umum dalam VB, serta lebih 900 fungsi. CD yang disertakan mengandungi teks penuh buku dan semua contoh program, serta beberapa bab tambahan yang tidak disertakan dalam versi bercetak. Pada tahun 1999, Dan Appleman mengeluarkan buku baharu, Buku Teka-teki API Win32 Dan Appleman dan Tutorial untuk Pengaturcara Asas Visual, yang merangkumi maklumat mengenai 7,600 fungsi lain (walaupun tidak begitu luas).

Win API dan Pustaka Pautan Dinamik (DLL)

Set Win API dilaksanakan dalam bentuk DLL dinamik. Seterusnya, kita sebenarnya akan bercakap tentang teknologi menggunakan DLL dalam persekitaran VB menggunakan contoh perpustakaan yang disertakan dalam Win API. Walau bagaimanapun, apabila bercakap tentang DLL, terdapat beberapa perkara penting untuk dibuat.

Dalam kes ini, dengan DLL kami maksudkan versi tradisional perpustakaan dinamik binari, yang menyediakan aplikasi dengan akses terus kepada prosedur yang diperlukan - subrutin atau fungsi (dengan cara yang sama seperti apa yang berlaku apabila memanggil prosedur dalam projek VB). Perpustakaan sedemikian boleh dibuat menggunakan alat yang berbeza: VC++, Delphi, Fortran, kecuali VB (mari lihat apa yang muncul dalam versi 7.0) - yang terakhir hanya boleh mencipta DLL ActiveX, diakses melalui antara muka Automasi OLE.

Biasanya fail perpustakaan dinamik mempunyai sambungan .DLL, tetapi ini tidak diperlukan sama sekali (untuk Win16 sambungan .EXE sering digunakan); pemacu peranti luaran ditetapkan menggunakan .DRV.

Seperti yang telah kami nyatakan, agak sukar untuk menentukan bilangan tepat fungsi Windows API dan fail yang mengandunginya, tetapi semuanya terletak dalam direktori sistem. Dalam hal ini, adalah lebih baik untuk menyerlahkan komposisi perpustakaan yang termasuk dalam kernel sistem pengendalian dan perpustakaan utama dengan fungsi tambahan utama.

Dan kini beberapa petua.

Petua 1. Pastikan iklan DL anda diformat dengan betul L-prosedur

Panggilan kepada prosedur DLL dalam program kelihatan sama seperti prosedur Visual Basic "biasa", contohnya:

Panggil DllName([senarai hujah])

Walau bagaimanapun, untuk menggunakan fungsi DLL luaran (termasuk Win API), ia mesti diisytiharkan dalam program menggunakan kenyataan Deklarasi, yang kelihatan seperti ini:

Isytiharkan Sub ProcedureName Lib _ “LibraryName” _ [([ArgumentList])]

Isytiharkan FunctionName Fungsi _ Lib “LibraryName” _ [([ArgumentList])]

Di sini, elemen pilihan operator ditunjukkan dalam kurungan segi empat sama, ungkapan berubah dalam huruf condong, dan perkataan yang selebihnya ialah kata kunci. Sistem bantuan memberikan penerangan yang agak baik tentang sintaks pengendali, jadi buat masa ini kami hanya akan mencatat beberapa perkara.

Pengisytiharan fungsi luaran hendaklah diletakkan di bahagian Pengisytiharan Am modul. Jika anda meletakkannya dalam modul borang, maka anda mesti menentukan kata kunci Peribadi (pengisytiharan ini hanya akan tersedia di dalam modul ini) - ini adalah had untuk semua prosedur modul borang.

Set Win32 API hanya dilaksanakan dalam bentuk fungsi (API Win16 mempunyai banyak Sub rutin). Untuk sebahagian besar, ini adalah fungsi jenis Panjang, yang paling kerap mengembalikan kod penyiapan operasi.

Pengendali Deklarasi muncul dalam MS Basic pada zaman DOS, dan ia juga digunakan untuk mengisytiharkan prosedur projek dalaman. Dalam Visual Basic ini tidak diperlukan, kerana pengisytiharan prosedur dalaman secara automatik adalah pengisytiharan Sub atau Fungsi mereka. Berbanding dengan Asas/DOS, penerangan baharu mesti menunjukkan nama fail perpustakaan di mana prosedur yang diperlukan terletak. Pustaka Wip API terletak dalam direktori sistem Windows, jadi cukup untuk memberikan nama fail sahaja. Jika anda mengakses DLL yang terletak di lokasi rawak, anda perlu menulis laluan penuh ke fail ini.

Perihalan pernyataan Deklarasi biasanya mengambil banyak ruang dan tidak muat pada satu baris dalam tetingkap kod. Oleh itu, kami mengesyorkan agar anda mematuhi skema pemecahan baris tertentu semasa menulis aplikasi, contohnya:

Isytihar Fungsi GetTempPath _ Lib “kernel32” Alias ​​​​“GetTempPathA” _ (ByVal nBufferLength Selagi, _ ByVal lpBuffer Sebagai Rentetan) Selagi

Dalam kes ini, semua elemen utama penerangan diletakkan pada baris yang berbeza dan oleh itu mudah dibaca.

Petua 2: Berhati-hati terutamanya apabila bekerja dengan fungsi DLL

Penggunaan Win API dan pelbagai fungsi DLL dengan ketara mengembangkan fungsi VB dan sering meningkatkan prestasi program. Walau bagaimanapun, harga yang perlu dibayar untuk ini adalah risiko mengurangkan kebolehpercayaan aplikasi, terutamanya semasa penyahpepijatannya.

Salah satu kelebihan persekitaran VB yang paling penting ialah kebolehpercayaan proses pembangunan program: beroperasi di bawah kawalan jurubahasa, kod program secara teorinya tidak boleh mengganggu operasi Windows dan VB itu sendiri. Pengaturcara mungkin tidak begitu berhati-hati tentang ketepatan menghantar parameter kepada fungsi yang dipanggil - ralat tersebut akan mudah dikesan oleh jurubahasa itu sendiri sama ada semasa proses menterjemah kod atau semasa pelaksanaannya. Dalam kes yang paling tidak menyenangkan, mod pemprosesan hanya akan terganggu, dengan petunjuk di mana dan mengapa ralat itu berlaku.

Menggunakan fungsi Windows API atau DLL lain secara langsung mengalih keluar kawalan sedemikian ke atas pemindahan data dan proses pelaksanaan kod di luar persekitaran VB. Oleh itu, ralat dalam mengakses fungsi luaran boleh menyebabkan ketidakupayaan kedua-dua VB dan sistem pengendalian. Ini benar terutamanya pada peringkat pembangunan program, apabila kehadiran ralat adalah agak semula jadi. Oleh itu, dengan menggunakan keupayaan yang lebih luas bagi fungsi lapisan asas sistem, pengaturcara bertanggungjawab untuk penggunaannya yang betul.

Masalahnya diburukkan lagi oleh fakta bahawa bahasa pengaturcaraan yang berbeza menggunakan cara yang berbeza untuk menghantar parameter antara prosedur. (Lebih tepat lagi, kaedah lulus berbeza digunakan secara lalai, kerana banyak bahasa boleh menyokong pelbagai kaedah.) API Win dilaksanakan dalam C/C++ dan menggunakan konvensyen lulus parameter C/C++ yang berbeza daripada versi VB biasa.

Dalam hal ini, perlu diperhatikan bahawa kemunculan analog fungsi API yang dibina ke dalam VB dibenarkan dengan tepat oleh penyesuaian yang terakhir kepada sintaks VB dan pelaksanaan mekanisme kawalan pertukaran data yang sesuai. Marilah kita ambil perhatian bahawa pada peringkat penyahpepijatan percubaan aplikasi apabila mencipta modul boleh laku, adalah lebih baik untuk menggunakan pilihan kompilasi P-kod dan bukannya Kod Asli (kod mesin). Dalam kes pertama, program ini akan berjalan di bawah kawalan jurubahasa - lebih perlahan berbanding dengan kod mesin, tetapi lebih dipercayai dari sudut pandangan kemungkinan kesan salah pada sistem pengendalian dan menyediakan mod yang lebih mudah untuk mengenal pasti ralat yang mungkin berlaku.

Petua 3: Sepuluh Petua Dan Appleman untuk Pengaturcaraan API Teguh dalam VB

Menggunakan fungsi API memerlukan pengaturcaraan yang lebih berhati-hati menggunakan beberapa teknik panggilan prosedur yang kurang biasa (berbanding dengan VB). Kami akan terus menangani isu-isu ini dalam perkara berikut. Dan kini kami membentangkan ringkasan nasihat yang dirumuskan oleh Dan Appleman mengenai topik ini (versi pertama mereka muncul pada tahun 1993) dengan beberapa tambahan dan ulasan kami.

1. Ingat ByVal. Kesilapan yang paling biasa dilakukan semasa mengakses fungsi API dan DLL ialah penggunaan kata kunci ByVal yang salah: mereka sama ada terlupa untuk meletakkannya, atau, sebaliknya, meletakkannya apabila ia tidak diperlukan.

Contoh-contoh ini menunjukkan impak pengendali ByVal pada penghantaran parameter

Jenis parameter Dengan ByVal Tanpa ByVal
Integer Integer 16-bit ditolak ke tindanan Alamat 32-bit integer 16-bit ditolak ke tindanan
Panjang Integer 32-bit ditolak ke tindanan Alamat 32-bit integer 32-bit ditolak ke tindanan
Tali Rentetan ditukar kepada format yang digunakan dalam C (data dan bait nol penamat). Alamat 32-bit baris baharu ditolak ke timbunan Pemegang VB ke rentetan ditolak ke tindanan. (Pengendalian sedemikian tidak pernah digunakan oleh API Windows itu sendiri dan hanya diiktiraf dalam DLL yang dilaksanakan khusus untuk VB.)

Perlu diingat di sini bahawa lulus parameter dalam mana-mana sistem pengaturcaraan, termasuk VB, dilakukan dalam dua cara utama: dengan rujukan (ByRef) atau mengikut nilai (ByVal). Dalam kes pertama, alamat pembolehubah diluluskan (pilihan ini digunakan secara lalai dalam VB), dalam kedua - nilainya. Perbezaan asas ialah menggunakan rujukan, nilai yang berubah bagi parameter yang diluluskan dikembalikan kepada program panggilan.

Untuk memahami perkara ini, jalankan eksperimen menggunakan program berikut:

Malapkan v Sebagai Integer v = 2 Panggil MyProc(v) MsgBox “v = “ & v Sub MyProc (v As Integer) v = v + 1 End Sub

Apabila anda menjalankan contoh ini, anda akan menerima mesej dengan nilai pembolehubah sama dengan 3. Hakikatnya ialah dalam kes ini alamat pembolehubah v, yang dicipta secara fizikal dalam program panggilan, dihantar ke subrutin MyProc. Sekarang tukar penerangan prosedur kepada

Sub MyProc (ByVal lwn As Integer)

Akibatnya, apabila melaksanakan ujian, anda akan mendapat v = 2, kerana hanya nilai awal pembolehubah dihantar ke prosedur - hasil operasi yang dilakukan dengannya tidak dikembalikan ke program panggilan. Mod pemindahan mengikut nilai juga boleh ditukar menggunakan operator Panggilan seperti berikut:

Sub MyProc (v Sebagai Integer) ... Panggil MyProc((v)) ‘ (v) - kurungan menunjukkan mod pemindahan mengikut nilai.

Walau bagaimanapun, apabila mengakses prosedur VB dalaman, penggunaan kata kunci ByVal dalam kenyataan Panggilan adalah dilarang - tanda kurungan digunakan sebaliknya. Terdapat penjelasan untuk ini.

Dalam kes klasik (C, Fortran, Pascal), perbezaan antara mod ByRef dan ByVal bergantung pada apa sebenarnya yang diletakkan pada timbunan pertukaran data - alamat pembolehubah atau nilainya. Asas mengikut sejarah menggunakan varian emulasi perisian ByVal - sentiasa ada alamat pada tindanan, tetapi hanya apabila melalui nilai pembolehubah sementara dicipta untuk ini. Untuk membezakan antara dua pilihan ini (Klasik dan Asas), cara berbeza untuk menerangkan mod ByVal digunakan. Ambil perhatian bahawa meniru mod ByVal dalam VB memberikan kebolehpercayaan program yang lebih tinggi: dengan mencampurkan bentuk rujukan, pengaturcara hanya berisiko bahawa nilai pembetulan pembolehubah akan dikembalikan (atau tidak dikembalikan) kepada program panggilan. Dalam versi "klasik", kekeliruan sedemikian boleh membawa kepada ralat maut apabila melaksanakan prosedur (contohnya, apabila nilai pembolehubah sama dengan, katakan, sifar, digunakan dan bukannya alamat memori).

Fungsi DLL dilaksanakan mengikut prinsip "klasik" dan oleh itu memerlukan penerangan mandatori tentang cara data ditukar dengan setiap hujah. Pengisytiharan fungsi melalui perihalan Istiharkan (lebih tepat, senarai hujah yang diluluskan) berfungsi untuk tujuan ini. Cara paling biasa untuk menghantar parameter kepada fungsi API Windows atau DLL ialah menggunakan kata kunci ByVal. Lebih-lebih lagi, ia boleh dinyatakan dalam pengendali Isytihar dan terus apabila memanggil fungsi tersebut.

Akibat daripada lulus parameter yang salah adalah mudah untuk diramalkan. Jika anda menerima alamat yang jelas tidak sah, anda akan menerima mesej GPF (General Protection Fault). Jika fungsi menerima nilai yang sepadan dengan alamat yang sah, maka fungsi API akan memasuki kawasan asing (contohnya, kernel Windows) dengan semua akibat buruk berikutnya.

2. Semak jenis parameter yang diluluskan. Nombor dan jenis parameter yang betul yang diluluskan adalah sama penting. Adalah perlu bahawa argumen yang diisytiharkan dalam Deklarasi sepadan dengan parameter yang dijangkakan dalam fungsi API. Kes ralat yang paling biasa dalam penghantaran parameter melibatkan perbezaan antara NULL dan rentetan panjang sifar - ingat bahawa ini bukan perkara yang sama.

3. Semak jenis pemulangan.

VB agak bertolak ansur dengan ketidakpadanan jenis pengembalian fungsi, kerana nilai berangka biasanya dikembalikan melalui daftar dan bukannya timbunan. Peraturan berikut akan membantu menentukan nilai yang betul yang dikembalikan oleh fungsi API:

  • Fungsi DLL yang tidak mengembalikan nilai (bersamaan dengan batal dalam 'C') mesti diisytiharkan sebagai Sub VB.
  • Fungsi API yang mengembalikan nilai integer (Integer atau Long) boleh ditakrifkan sebagai sama ada Sub atau Fungsi yang mengembalikan nilai jenis yang sesuai.
  • Tiada fungsi API mengembalikan nombor titik terapung, tetapi sesetengah DLL mungkin mengembalikan data jenis ini.

4. Gunakan binaan "Sebagaimana" dengan berhati-hati. Banyak fungsi API Windows mempunyai keupayaan untuk menerima parameter pelbagai jenis dan menggunakan binaan As Any untuk berbuat demikian (tafsiran jenis dilakukan bergantung pada nilai parameter lain yang diluluskan).

Penyelesaian yang baik dalam kes ini mungkin menggunakan beberapa alias (Alias) fungsi dengan mencipta dua atau lebih pengisytiharan untuk fungsi yang sama, dengan setiap pengisytiharan menentukan parameter jenis tertentu.

5. Jangan lupa untuk memulakan rentetan. Terdapat banyak fungsi dalam Win API yang mengembalikan maklumat dengan memuatkan data ke dalam penimbal rentetan yang diluluskan sebagai parameter. Dalam program anda, anda nampaknya boleh melakukan semuanya dengan betul: jangan lupa tentang ByVal, hantar parameter ke fungsi dengan betul. Tetapi Windows tidak boleh menyemak berapa besar saiz memori yang diperuntukkan untuk satu baris. Saiz baris mestilah cukup besar untuk menampung semua data yang boleh diletakkan di dalamnya. Tanggungjawab untuk menempah penimbal dengan saiz yang diperlukan terletak pada pengaturcara VB.

Perlu diingatkan bahawa dalam Windows 32-bit, apabila menggunakan rentetan, penukaran dilakukan dari Unicode (pengekodan dua bait) ke ANSI (pengekodan bait tunggal) dan belakang, dengan mengambil kira tetapan sistem nasional. Oleh itu, untuk menempah penimbal, kadangkala lebih mudah untuk menggunakan tatasusunan bait dan bukannya pembolehubah rentetan. (Lebih lanjut mengenai ini di bawah.)

Selalunya, fungsi Win API membolehkan anda menentukan sendiri saiz blok maksimum. Khususnya, kadangkala ini memerlukan panggilan fungsi API lain yang akan "memberitahu" saiz blok. Sebagai contoh, GetWindowTextLength membolehkan anda menentukan panjang rentetan yang diperlukan untuk memegang tajuk tetingkap yang dikembalikan oleh fungsi GetWindowText. Dalam kes ini, Windows memastikan anda tidak melampaui batas.

6. Pastikan anda menggunakan Option Explicit.

7. Berhati-hati menyemak nilai parameter dan nilai pulangan. VB mempunyai keupayaan menyemak jenis yang baik. Ini bermakna apabila anda cuba menghantar parameter yang tidak sah kepada fungsi VB, perkara terburuk yang boleh berlaku ialah anda mendapat mesej ralat daripada VB. Tetapi mekanisme ini, malangnya, tidak berfungsi apabila mengakses fungsi API Windows.

Windows 9x telah menambah baik pemeriksaan parameter untuk kebanyakan fungsi API. Oleh itu, kehadiran ralat dalam data biasanya tidak menyebabkan ralat maut, tetapi menentukan apa yang menyebabkannya tidak begitu mudah.

Di sini kami mengesyorkan menggunakan beberapa cara untuk menyahpepijat jenis ralat ini:

  • Gunakan mod penyahpepijatan langkah demi langkah atau arahan Debug.Print untuk menyemak setiap panggilan fungsi API yang mencurigakan. Semak keputusan panggilan ini untuk memastikan semuanya normal dan fungsi selesai dengan betul;
  • gunakan penyahpepijat Windows seperti CodeView dan versi nyahpepijat Windows (tersedia dalam Windows SDK). Alat ini boleh mengesan ralat parameter dan sekurang-kurangnya menentukan fungsi API yang menyebabkan ralat;
  • Gunakan alat pihak ketiga tambahan untuk menyemak jenis parameter dan kesahihan nilainya. Alat sedemikian bukan sahaja dapat mencari ralat parameter, malah menunjuk ke baris kod VB di mana ralat itu berlaku.

Di samping itu, adalah perlu untuk menyemak hasil pelaksanaan fungsi API.

8. Ingat bahawa integer dalam VB dan dalam Windows bukanlah perkara yang sama. Pertama sekali, anda harus ingat bahawa istilah "Integer" dalam VB bermaksud nombor 16-bit, manakala dalam dokumentasi Win 32 ia bermaksud nombor 32-bit. Kedua, integer (Integer dan Long) dalam VB adalah kuantiti yang ditandatangani (iaitu, satu digit digunakan sebagai tanda, selebihnya sebagai mantissa nombor), dalam Windows hanya nombor bukan negatif digunakan. Keadaan ini mesti diingat apabila anda membentuk parameter yang diluluskan menggunakan operasi aritmetik (contohnya, mengira alamat dengan menjumlahkan beberapa asas dan mengimbangi). Fungsi aritmetik VB standard tidak sesuai untuk ini. Kami akan membincangkan perkara yang perlu dilakukan dalam kes ini secara berasingan.

9. Beri perhatian kepada nama fungsi. Tidak seperti Win16, nama semua fungsi API Win32 adalah sensitif kepada penggunaan tepat huruf kecil dan huruf besar (ini tidak berlaku dalam Win16). Jika anda di suatu tempat menggunakan huruf kecil dan bukannya huruf besar atau sebaliknya, maka fungsi yang dikehendaki tidak akan ditemui. Juga berhati-hati untuk menggunakan akhiran A atau W dengan betul dalam fungsi yang menggunakan parameter rentetan. (Untuk lebih lanjut mengenai ini, lihat di bawah.)

10. Simpan kerja anda dengan kerap. Ralat yang dikaitkan dengan penggunaan DLL dan Win API yang tidak betul boleh membawa kepada penamatan kecemasan persekitaran VB, dan mungkin keseluruhan sistem pengendalian. Anda harus memastikan bahawa kod yang anda tulis disimpan sebelum ujian dijalankan. Perkara paling mudah ialah menetapkan mod untuk rakaman automatik modul projek sebelum memulakan projek dalam persekitaran VB.

Selepas membaca nasihat sebelumnya, anda mungkin berfikir bahawa menggunakan fungsi Win API adalah berisiko. Sedikit sebanyak ini benar, tetapi hanya berbanding dengan pengaturcaraan selamat yang disediakan oleh VB sendiri. Tetapi dengan penggunaan mahir dan pengetahuan tentang kemungkinan perangkap, risiko ini adalah minimum. Di samping itu, selalunya mustahil untuk meninggalkan sepenuhnya penggunaan Win API - mereka masih diperlukan untuk sebarang perkembangan yang serius.

Di samping itu, kami sebelum ini menyebut tentang perangkap untuk kelas DLL yang luas. Dalam kes Win API, semuanya lebih mudah, kerana borang untuk mengakses fungsi ini jelas bersatu. Perkara utama berikut harus diingat:

  1. Fungsi Win32 API hanyalah itu: fungsi, iaitu, prosedur jenis Fungsi (terdapat banyak Sub rutin dalam Win16 API). Semua ini adalah fungsi jenis Long, jadi penerangannya ditulis dalam bentuk berikut: Isytiharkan nama Fungsi ... Memandangkan Long 'jenis fungsi _ ditakrifkan secara eksplisit

    Isytihar Nama Fungsi& ‘ jenis fungsi _ ditentukan menggunakan akhiran

    Panggilan ke fungsi API kelihatan seperti ini:

Keputusan& = ApiName& ([ ArgumentList]
  1. Selalunya, nilai pulangan fungsi ialah kod penyiapan operasi. Selain itu, nilai bukan sifar dalam kes ini bermakna penyiapan biasa, sifar bermakna ralat. Biasanya (tetapi tidak selalu) anda boleh menjelaskan sifat ralat dengan memanggil fungsi GetLastError. Perihalan fungsi ini kelihatan seperti ini: Isytiharkan Fungsi GetLastError& Lib “kernel32” ()

    PERHATIAN! Apabila bekerja dalam VB, lebih baik menggunakan sifat LastDLLError objek Err untuk mendapatkan nilai kod ralat yang layak, kerana VB kadangkala menetapkan semula fungsi GetLastError antara memanggil API dan meneruskan pelaksanaan program.

    Anda boleh mentafsir kod yang dikembalikan oleh GelLastError menggunakan pemalar yang ditulis dalam fail API32.TXT, dengan nama bermula dengan akhiran ERROR_.

    Ralat yang paling tipikal mempunyai kod berikut:

    • ERROR_INVALID_HANDLE = 6& - pemegang tidak sah
    • ERROR_CALL_NOT_IMPLEMENTED = 120& - memanggil fungsi dalam Windows 9x yang hanya tersedia untuk Windows NT
    • ERROR_INVALID_PARAMETER = 87& - nilai parameter salah

    Walau bagaimanapun, banyak fungsi mengembalikan nilai beberapa parameter yang diminta (contohnya, OpenFile mengembalikan nilai pemegang fail). Dalam kes sedemikian, ralat ditentukan oleh beberapa nilai Pulangan& khas lain, selalunya 0 atau –1.

  2. API Win32 menggunakan cara tetap ketat untuk memindahkan jenis data yang paling mudah. a) ByVal...Selagi

    Sekurang-kurangnya 80% penghantaran hujah dilakukan menggunakan pembolehubah Long. Perhatikan bahawa hujah Sentiasa disertakan dengan kata kunci ByVal, dan ini, antara lain, bermakna pemindahan data sehala dilakukan - daripada program VB ke fungsi API.

    B) ByVal...Sebagai Rentetan

    Jenis pemindahan data ini juga berlaku agak kerap, dan dengan hujah juga Sentiasa ByVal terpakai. Apabila fungsi API dipanggil, alamat rentetan ditulis pada tindanan, jadi dalam kes ini pertukaran data dua hala adalah mungkin. Terdapat beberapa bahaya yang perlu diperhatikan apabila bekerja dengan rentetan.

    Yang pertama ialah tempahan memori untuk rentetan dibuat dalam program panggilan, jadi jika fungsi API akan mengisi rentetan, maka anda perlu mencipta rentetan saiz yang diperlukan sebelum memanggilnya. Sebagai contoh, fungsi GetWindowsDirectory mengembalikan laluan ke direktori Windows, yang mengikut definisi mestilah tidak lebih daripada 144 aksara panjang. Oleh itu, memanggil fungsi ini sepatutnya kelihatan seperti ini:

    WinPath$ = Space$(144) ' simpan rentetan _ 144 aksara Result& = GetWindowsDirectory& (WinTath$, 144) _ ' isi penampan ' Result& - bilangan sebenar aksara dalam _ nama direktori WinPath$ = Left$(WinPath , Keputusan&)

    Masalah kedua ialah apabila memanggil fungsi API, rentetan sumber ditukar kepada beberapa perwakilan dalaman, dan apabila keluar dari fungsi itu, sebaliknya. Jika pada zaman Win16 operasi ini hanya terdiri daripada menambah bait sifar pada penghujung baris, maka dengan kemunculan Win32 ini telah ditambah kepada transformasi pengekodan Unicode dua bait kepada ANSI dan sebaliknya. (Ini telah dibincangkan secara terperinci dalam artikel "Ciri-ciri bekerja dengan pembolehubah rentetan dalam VB", ComputerPress 10'99 dan 01'2000). Buat masa ini, mari kita ambil perhatian bahawa menggunakan ByVal ... Sebagai binaan String, anda boleh menukar rentetan dengan hanya data aksara.

    B) ...Sebagaimanapun

    Ini bermakna bahawa beberapa alamat penimbal memori akan ditolak ke tindanan, kandungannya akan ditafsirkan oleh fungsi API, contohnya, bergantung pada nilai argumen lain. Walau bagaimanapun, As Any hanya boleh digunakan dalam pernyataan Deklarasi - apabila fungsi tertentu dipanggil, pembolehubah tertentu mesti ditakrifkan sebagai hujah.

    D) ... Sebagai UserDefinedType

    Reka bentuk ini juga sering digunakan apabila perlu untuk menukar data (biasanya dalam kedua-dua arah) menggunakan beberapa struktur. Sebenarnya, pembinaan ini adalah sejenis pelaksanaan konkrit bagi bentuk penghantaran As Any, cuma dalam kes ini fungsi dikonfigurasikan kepada struktur tetap.

    Bentuk struktur data ditentukan oleh fungsi API tertentu, dan menjadi tanggungjawab pengaturcara untuk menerangkan dan menyimpannya dengan betul dalam program panggilan. Reka bentuk ini Sentiasa digunakan tanpa perkataan ByVal, iaitu, dalam kes ini, pemindahan melalui rujukan dilakukan - alamat pembolehubah ditulis pada timbunan.

Contoh memanggil fungsi API

Mari kita menggambarkan perkara di atas menggunakan contoh menggunakan dua fungsi berguna untuk bekerja dengan fail - lopen dan lread, yang diterangkan seperti berikut:

Isytihar Fungsi lopen Lib “kernel32” _ Alias ​​​​“_lopen” (_ ByVal lpFileName As String, _ ByVal wReadWrite Selagi) As Long Isytirkan Fungsi lread Lib “kernel32” _ Alias ​​​​“_lread” (_ ByVal hFile Selagi, lpBuffer As Any, _ ByVal wBytes Selagi) Selagi

Dalam VB, analog mereka - dalam kes ini yang tepat - ialah operator Buka dan Dapatkan (untuk mod Binari). Marilah kita segera memberi perhatian kepada penggunaan kata kunci Alias ​​dalam pengisytiharan fungsi - ini betul-betul berlaku apabila anda tidak boleh melakukannya tanpanya. Nama fungsi sebenar dalam pustaka bermula dengan garis bawah (gaya bahasa C tipikal), yang tidak dibenarkan dalam VB.

Operasi pembukaan fail mungkin kelihatan seperti ini:

Const INVALID_HANDLE_VALUE = -1 ' nilai deskriptor _ salah lpFileName$ = “D:\calc.bas” ' nama fail wReadWrite& = 2 ' mod baca-tulis hFile& = lopen(lpFileName$, wReadWrite&) _ ' tentukan deskriptor fail& = Jika hFile INVALID_HANDLE_VALUE Kemudian _ ' ralat membuka fail ' nyatakan kod ralat CodeError& = Err.LastDllError 'CodeError& = GetLastError _ ' pembinaan ini tidak berfungsi Tamat Jika

Di sini anda perlu memberi perhatian kepada dua perkara:

  • sebagai nilai fungsi kita mendapat nilai deskriptor fail. Ralat sepadan dengan nilai -1;
  • Ia adalah tepat dalam kes ini bahawa memanggil fungsi GetLastError tidak berfungsi - untuk mendapatkan nilai ralat yang diperhalusi, kami beralih kepada objek Err (kami bercakap tentang kemungkinan situasi sedemikian di atas).

Kandungan fail kemudiannya boleh dibaca, tetapi ini mengandaikan bahawa pengaturcara mesti mempunyai sedikit pemahaman tentang strukturnya (sama seperti yang berlaku apabila bekerja dengan fail binari sewenang-wenangnya). Dalam kes ini, memanggil fungsi lread mungkin kelihatan seperti ini:

Dim MyVar As Single wBytes = lread (hFile&, MyVar, Len(MyVar) ' membaca nombor nyata, 4 bytes ' wBytes ialah bilangan data yang sebenarnya dibaca, ' -1 ialah ralat... Taip MyStruct x As Single i As Integer End Type Dim MyVar As MyStruct wBytes = lread (hFile&, MyVar, Len(MyVar)) ' baca struktur data, 6 bait

Sila ambil perhatian sekali lagi: hujah kedua kepada fungsi diluluskan dengan rujukan, selebihnya diluluskan oleh nilai.

Malapkan MyVar Sebagai String MyVar = Space$(10) ‘menyimpan pembolehubah untuk 10 aksara wBytes = lread (hFile&, ByVal MyVar, Len(MyVar)) ‘ membaca rentetan aksara, 10 aksara

Di sini anda boleh melihat perbezaan penting daripada contoh sebelumnya - pembolehubah rentetan semestinya disertakan dengan kata kunci ByVal.

Membaca kandungan fail dalam tatasusunan (untuk kesederhanaan, kami akan menggunakan tatasusunan bait satu dimensi) dilakukan seperti berikut:

Malapkan MyArray(1 Hingga 10) Sebagai Byte wBytes = lread (hFile&, MyArray(1), _ Len(MyArray(1))* 10) ‘ baca 10 elemen tatasusunan

Dengan menentukan elemen pertama tatasusunan sebagai hujah, kami menghantar alamat permulaan kawasan memori yang dikhaskan untuk tatasusunan. Jelas sekali, anda boleh mengisi mana-mana serpihan tatasusunan dengan cara ini:

WBytes = lread (hFile&, MyArray(4), _ Len(MyArray(1))* 5) ‘ baca elemen tatasusunan 4 hingga 8

Petua 5: Gunakan Alias ​​​​untuk Gear dan parameter Sebagai Mana-mana

Di sini, berdasarkan contoh sebelumnya, kami akan mendedahkan intipati petua keempat Dan Appleman.

Apabila bekerja dengan fungsi lread, anda harus ingat bahawa apabila mengaksesnya menggunakan pembolehubah rentetan, anda mesti menggunakan kata kunci ByVal (jika tidak, anda akan menerima mesej tentang operasi haram). Untuk melindungi diri anda, anda boleh membuat penerangan khas tambahan bagi fungsi yang sama untuk berfungsi hanya dengan pembolehubah rentetan:

Isytiharkan Fungsi lreadString Lib “kernel32” _ Alias ​​​​“_lread” (_ ByVal hFile Sepanjang, ByVal lpBuffer Sebagai Rentetan, _ ByVal wBytes Selagi)

Apabila bekerja dengan perihalan ini, anda tidak perlu lagi menyatakan ByVal apabila menghubungi:

WBytes = lreadString(hFile&, MyVarString, _ Len(MyVarString)) '

Nampaknya sintaks pengendali Deklarasi membolehkan anda membuat penerangan khas yang serupa untuk tatasusunan:

Isytiharkan Fungsi lreadString Lib “kernel32” Alias ​​​​“_lread” (_ ByVal hFile Sepanjang, lpBuffer() Sebagai Byte, _ ByVal wBytes Selagi)

Bagaimanapun, rayuan itu

WBytes = lreadArray(hFile&, MyArray(), 10)

tidak dapat dielakkan membawa kepada ralat program yang membawa maut.

Ini adalah kesinambungan perbualan tentang keanehan pemprosesan pembolehubah rentetan dalam Visual Basic: VB menggunakan pengekodan Unicode dua bait, Win API menggunakan ANSI bait tunggal (dan dengan format yang diterima pakai dalam C - dengan bait sifar pada penghujungnya) . Sehubungan itu, apabila menggunakan pembolehubah rentetan sebagai hujah, penukaran daripada Unicode kepada ANSI sentiasa dilakukan secara automatik apabila memanggil fungsi API (lebih tepat lagi, fungsi DLL) dan penukaran terbalik apabila kembali.

Pengambilan daripada ini adalah mudah: Pembolehubah rentetan boleh digunakan untuk menukar data aksara, tetapi ia tidak boleh digunakan untuk menukar maklumat binari sewenang-wenangnya (seperti yang berlaku dengan versi 16-bit VB). Dalam kes kedua, lebih baik menggunakan tatasusunan bait satu dimensi.

Seperti yang anda ketahui, jenis String boleh digunakan untuk menerangkan struktur tersuai. Dalam hal ini, anda perlu ingat perkara berikut:

  • Dilarang sama sekali menggunakan binaan berikut untuk mengakses Win API: Taip MyStruct x As Single s As String ‘variable-length string End Type

    Dalam kes rentetan panjang boleh ubah, deskriptor rentetan diluluskan sebagai sebahagian daripada struktur dengan semua akibat berikutnya dalam bentuk ralat pelaksanaan program.

  • Anda boleh menggunakan rentetan panjang tetap sebagai elemen struktur: Taip MyStruct x As Single s As String*8 ‘ rentetan panjang tetap Jenis Tamat

Dalam kes ini, penukaran pengekodan yang sepadan dilakukan.

Dan satu nota terakhir: dalam apa jua keadaan anda tidak boleh menggunakan tatasusunan pembolehubah rentetan (kedua-dua panjang tetap dan berubah) apabila mengakses fungsi API. Jika tidak, kemunculan "operasi haram" akan dijamin.

Kemungkinan anda akan mengalami situasi di mana anda perlu menulis fungsi DLL anda sendiri. Keperluan untuk ini pasti akan timbul jika anda menggunakan teknologi pengaturcaraan campuran - menggunakan dua atau lebih bahasa pengaturcaraan untuk melaksanakan satu aplikasi.

Dalam hal ini, kami perhatikan bahawa pengaturcaraan campuran adalah perkara biasa untuk melaksanakan aplikasi yang agak kompleks. Sesungguhnya, setiap bahasa (lebih tepat, sistem pengaturcaraan berdasarkan bahasa) mempunyai kekuatan dan kelemahannya sendiri, jadi agak logik untuk mengambil kesempatan daripada alat yang berbeza untuk menyelesaikan masalah yang berbeza. Sebagai contoh, VB - untuk mencipta antara muka pengguna, C - untuk akses cekap kepada sumber sistem, Fortran - untuk melaksanakan algoritma berangka.

Pendapat penulis ialah: sebarang pengaturcaraan yang serius memerlukan pembangun mahir dalam sekurang-kurangnya dua alat. Sudah tentu, dalam keadaan moden pembahagian kerja yang jelas adalah sangat sukar untuk menjadi pakar yang sangat baik walaupun dalam dua sistem, jadi skema "bahasa utama dan tambahan" lebih logik. Idea di sini ialah walaupun pengetahuan cetek tentang bahasa "bantuan" (menulis prosedur yang agak mudah) boleh meningkatkan kecekapan penggunaan bahasa "utama". Ambil perhatian bahawa pengetahuan tentang VB, sekurang-kurangnya sebagai tambahan, kini hampir menjadi keperluan wajib untuk pengaturcara profesional. Ngomong-ngomong, pada zaman DOS, pengetahuan tentang asas Assembler sangat diingini untuk mana-mana pengaturcara, termasuk Asas.

Satu cara atau yang lain, walaupun dalam kerja kumpulan, apabila setiap pengaturcara terlibat dalam tugas khusus mereka sendiri, semua peserta projek harus mempunyai idea tentang ciri-ciri antara muka prosedur dalam bahasa yang berbeza. Dan ketahuilah bahawa banyak sistem pengaturcaraan (termasuk VB), sebagai tambahan kepada antara muka lalai, membolehkan anda menggunakan kaedah lanjutan lain untuk mengakses prosedur yang memungkinkan untuk menyesuaikan antara muka ke bahasa lain.

Apabila mengkaji antara muka antara prosedur, anda harus memberi perhatian kepada kemungkinan perangkap berikut:

  • Bahasa yang berbeza mungkin menggunakan konvensyen yang berbeza untuk menulis pengecam. Sebagai contoh, adalah perkara biasa untuk menggunakan garis bawah pada permulaan nama prosedur, yang tidak dibenarkan dalam VB. Masalah ini mudah diselesaikan dengan menggunakan kata kunci Alias ​​dalam pernyataan Deklarasi (lihat contoh tip 2.3).
  • Urutan penulisan yang berbeza menghantar hujah ke tindanan boleh digunakan. Sebagai contoh, pada zaman DOS (sejujurnya saya mengakui, saya tidak tahu bagaimana rupanya sekarang dalam persekitaran Windows), C menulis hujah dari hujung senarai, bahasa lain (Fortran, Pascal, Basic) - dari permulaan.
  • Secara lalai, prinsip lulus parameter yang berbeza digunakan - dengan rujukan atau nilai.
  • Pelbagai prinsip untuk menyimpan pembolehubah rentetan. Contohnya, dalam C (serta dalam Fortran dan Pascal), panjang rentetan ditentukan oleh bait nol pada penghujungnya, tetapi dalam Asas panjangnya ditulis secara eksplisit dalam deskriptor rentetan. Sudah tentu, anda perlu mengingati kemungkinan menggunakan pengekodan aksara yang berbeza.
  • Apabila memindahkan tatasusunan multidimensi, anda harus ingat bahawa pelbagai pilihan untuk menukar struktur multidimensi kepada struktur satu dimensi adalah mungkin (bermula dari indeks pertama atau dari yang terakhir, berhubung dengan tatasusunan dua dimensi - "mengikut baris" atau "mengikut lajur" ).

Dengan mengambil kira semua ini, cadangan berikut boleh dirumuskan:

  • Gunakan kaedah yang paling mudah dan terbukti untuk menghantar argumen kepada fungsi DLL. Piawaian yang diterima pakai untuk Win API agak sesuai sebagai model.
  • Jangan sekali-kali lulus tatasusunan pembolehubah rentetan.
  • Berhati-hati apabila menghantar pembolehubah rentetan mudah dan tatasusunan berbilang dimensi.
  • Pastikan anda menyemak khas fungsi mekanisme untuk menghantar hujah kepada prosedur yang dipanggil dan kembali. Tulis ujian khas untuk menyemak pemindahan data. Periksa secara berasingan bahawa setiap hujah diluluskan dengan betul. Sebagai contoh, jika anda mempunyai prosedur dengan beberapa hujah, semak dahulu bahawa setiap parameter diluluskan dengan betul untuk pilihan satu hujah, dan kemudian untuk keseluruhan senarai.

Tetapi bagaimana jika fungsi DLL sudah ditulis, contohnya, dalam Fortran, tetapi antara muka inputnya tidak sesuai dengan piawaian VB di atas? Terdapat dua nasihat di sini. Pertama: tulis fungsi DLL ujian dan gunakannya untuk cuba mencari panggilan yang dikehendaki daripada program VB menggunakan percubaan dan ralat. Kedua: tulis prosedur penyesuai dalam Fortran yang sama yang akan menyediakan antara muka mudah antara VB dan fungsi DLL dengan penukaran struktur data ringkas kepada yang kompleks (contohnya, menukar tatasusunan bait berbilang dimensi kepada tatasusunan rentetan).

Jadi: gunakan fungsi DLL. Tapi tetap berwaspada...

ComputerPress 9"2000

Versi pertama Android muncul pada Oktober 2008 - hanya 4 tahun yang lalu, yang tidak begitu lama untuk sistem pengendalian. Pada masa ini, lebih daripada dua dozen kemas kini telah dikeluarkan. Bahagian utama kemas kini termasuk elemen baharu perisian antara muka ( API), aplikasi yang boleh digunakan untuk keperluan mereka. Supaya versi Android tertentu mengetahui sama ada ia boleh memenuhi permintaan perisian aplikasi tertentu, penomboran antara muka perisian telah diperkenalkan. Nombor yang mencirikan versi antara muka telah dibenamkan dalam aplikasi itu sendiri, dan sistem menggunakannya untuk menentukan keserasian aplikasi ini dengan dirinya sendiri. Nombor ini dipanggil "Tahap API". Sudah ada 17 tahap secara keseluruhan, setiap tahap berikutnya merangkumi semua fungsi yang sebelumnya dan menambah yang baharu.

Untuk menulis aplikasi, SDK dipasang pada komputer bersama-sama dengan sistem pengaturcaraan ( kit pembangunan perisian) ialah kit pembangunan, bahagian utamanya ialah perpustakaan kelas tahap API yang sepadan. Setiap tahap API mempunyai perpustakaan sendiri, fungsi yang digunakan oleh aplikasi. Jika kami menggunakan perpustakaan peringkat API pertama untuk membangunkan aplikasi kami, kami tidak akan mempunyai fungsi yang muncul kemudian. Jika kami menggunakan pustaka peringkat terkini, kami berisiko menjadikan aplikasi kami tidak serasi dengan versi Android yang lebih lama jika kami tiba-tiba menggunakan fungsi yang tidak disokong sebelum ini. Jadi bagaimana anda memilih tahap API?

Dalam aplikasi kami, kami mesti memasang dua tahap API (terdapat juga tahap ketiga, tetapi ia sebenarnya telah hilang kerana tidak perlu). Yang pertama ialah tahap API minimum di mana aplikasi akan dijalankan, dan yang kedua ialah tahap API sasaran, iaitu tahap API di mana aplikasi itu disusun. Apabila menerbitkan aplikasi, tahap ini hendaklah maksimum yang tersedia pada masa itu, supaya dalam versi baharu Android ia tidak berfungsi dalam mod keserasian, tetapi menggunakan semua loceng dan wisel versi baharu sistem pengendalian (bebas daripada pengarang program itu sendiri). Pada masa menulis program, ia harus disusun ke tahap API minimum yang mungkin supaya tidak menggunakan fungsi baharu.

Hasilnya, kami mendapat metodologi pembangunan aplikasi berikut:

  1. Kami mengkaji khalayak sasaran - versi Android yang dipasang pada telefon pintar mereka. Jika kami menulis untuk semua orang, adalah berguna untuk membiasakan diri anda dengan graf yang sentiasa dikemas kini mengenai penggunaan satu atau versi lain sistem pada peranti mudah alih: http://developer.android.com/intl/ru/about/ papan pemuka/index.html. Hari ini kita melihat bahawa sebahagian besar sudah berada pada tahap API 10, tetapi terdapat juga sebahagian besar berada pada tahap 7 dan 8. Perbezaan tahap boleh dilihat di sini (http://developer.android.com/intl/ru/guide /topics/manifest/uses-sdk-element.html) dengan mengklik pada nombor API yang sepadan dalam jadual.
  2. Jika kami tidak mahu kehilangan kira-kira 10% daripada khalayak, kami memilih tahap API minimum 7. Jika tidak, kami boleh memilih tahap API 10, iaitu di mana hampir separuh daripada pengguna berada hari ini. Pasang SDK yang sepadan dengan tahap minimum yang dipilih.
  3. Kami menetapkan tahap sasaran sama dengan minimum, menulis dan menyusun atur cara untuknya. Kami melancarkan dan mengujinya pada emulator telefon pintar dengan API tahap minimum dipasang.
  4. Selepas menulis dan menyahpepijat program, kami meningkatkan tahap sasaran sebanyak satu, menyusun atur cara di bawah SDK tahap sasaran baharu dan mengujinya dalam emulator telefon pintar baharu dengan tahap yang sesuai. Seterusnya, kami terus meningkatkan tahap API sasaran, menyusun dan menguji program sehingga kami mencapai tahap API tertinggi.
  5. Itu sahaja, kini anda boleh menerbitkan program tersebut. Apabila versi baharu Android dikeluarkan dengan tahap API baharu, program kami akan didayakan dalam mod keserasian dan akan berfungsi seperti sebelumnya. Untuk menjadikan program berfungsi secara langsung, dan bukan dalam mod keserasian, kami mengambil projek kami, memuat turun SDK baharu tahap API terkini dan menyusun aplikasi di bawahnya. Kini aplikasi akan dilancarkan pada sistem baharu dalam mod biasa, dan mungkin akan kelihatan sedikit berbeza, dalam tradisi versi baharu sistem pengendalian. Pada masa yang sama, pada versi lama sistem aplikasi kekal seperti sedia ada.
Akibatnya, selepas memikirkannya, saya memilih tahap API 7. Di samping itu, apabila menggunakan beberapa fungsi baharu yang muncul dalam API yang lebih lama kemudian (contohnya, serpihan), persekitaran pembangunan itu sendiri mencadangkan saya menggunakan pakej keserasian khas, dan menambahnya pada projek itu. Hasilnya, saya dapat menggunakan beberapa ciri baharu daripada API baharu dalam yang lama. Walau bagaimanapun, ini adalah topik lain.