Wat is een api-niveau voor beginners. Wat is een API en waar heb je deze mogelijk voor nodig?

Het API-classificatiesysteem voor motorolie () werd in 1969 gecreëerd. Volgens het API-systeem worden drie operationele categorieën (drie rijen) voor het doel en de kwaliteit van motoroliën vastgesteld:
S (Dienst)- bestaat uit de kwaliteitscategorieën motoroliën voor benzinemotoren, in chronologische volgorde.
C (commercieel)- bestaat uit de categorieën van kwaliteit en doel van oliën voor dieselmotoren, in chronologische volgorde.
EC (Energiebesparing)- energiebesparende oliën. Een nieuwe reeks hoogwaardige oliën, bestaande uit laagviskeuze, laagvloeiende oliën die het brandstofverbruik verminderen bij tests met benzinemotoren.

Voor elke nieuwe klas wordt alfabetisch een extra letter toegewezen. Multifunctionele oliën voor benzine- en dieselmotoren worden aangeduid met twee symbolen van de respectievelijke categorieën: het eerste symbool is het belangrijkste en het tweede geeft de mogelijkheid aan om deze olie voor een ander type motor te gebruiken. Voorbeeld: API SM / CF.

API-waarden voor benzinemotoren

API SN-klasse- goedgekeurd op 1 oktober 2010.
Het belangrijkste verschil tussen API SN en eerdere API-classificaties is de beperking van het fosforgehalte voor compatibiliteit met moderne, evenals uitgebreide energiebesparing. Dat wil zeggen, oliën geclassificeerd door API SN zullen ongeveer overeenkomen met ACEA C2, C3, C4, zonder correctie voor viscositeit bij hoge temperatuur.

API SM-klasse- goedgekeurd op 30 november 2004.
Motoroliën voor moderne benzinemotoren (meerkleppen, turbomotoren). Vergeleken met de SL-klasse moeten motoroliën die voldoen aan de API SM-eisen een hoger beschermingsniveau hebben tegen oxidatie en voortijdige slijtage van motoronderdelen. Daarnaast zijn de eisen gesteld aan de eigenschappen van de olie bij lage temperaturen. Motoroliën van deze klasse kunnen worden gecertificeerd volgens de ILSAC-energie-efficiëntieklasse.
Motoroliën die voldoen aan de eisen van API SL, SM kunnen worden gebruikt in gevallen waarin de autofabrikant klasse SJ of eerder aanbeveelt.

API SL-klasse- motoroliën voor motoren van auto's die na 2000 zijn geproduceerd.
In overeenstemming met de eisen van autofabrikanten, worden motoroliën van deze klasse gebruikt in turbomotoren met meerdere kleppen die werken op magere brandstofmengsels die voldoen aan de moderne verhoogde milieu-eisen, evenals energiebesparing. Auto-oliën die voldoen aan de API SL-vereisten kunnen worden gebruikt in gevallen waarin de autofabrikant de SJ-klasse of eerder aanbeveelt.

SJ API-klasse- motoroliën voor gebruik in benzinemotoren sinds 1996.
Deze klasse beschrijft motoroliën die sinds 1996 in benzinemotoren worden gebruikt. Motoroliën van deze klasse zijn bedoeld voor gebruik in benzinemotoren van auto's en sportwagens, bestelwagens en lichte vrachtwagens, die worden onderhouden in overeenstemming met de vereisten van autofabrikanten. SJ biedt dezelfde minimumnormen als SH, plus extra vereisten voor koolstof en lage temperaturen. Motoroliën die voldoen aan de API SJ-vereisten kunnen worden gebruikt wanneer de voertuigfabrikant SH-klasse of eerder aanbeveelt.

API SH-klasse- motoroliën voor benzinemotoren sinds 1994.
De klasse werd in 1992 goedgekeurd voor motoroliën die sinds 1993 worden aanbevolen. Deze klasse wordt gekenmerkt door hogere eisen in vergelijking met de SG-klasse en werd ontwikkeld als vervanging voor de laatste, om de anti-koolstof-, antioxiderende en antislijtage-eigenschappen van oliën en verhoogde corrosiebescherming. Motoroliën van deze klasse zijn bedoeld voor gebruik in benzinemotoren van personenauto's, bestelwagens en lichte vrachtwagens, in overeenstemming met de aanbevelingen van hun fabrikanten. Motoroliën van deze klasse zijn getest in overeenstemming met de eisen van de Chemical Manufacturers Association (CMA). Motoroliën van deze klasse kunnen worden gebruikt wanneer de voertuigfabrikant klasse SG of eerder aanbeveelt.

API SG-klasse- motoroliën voor benzinemotoren sinds 1989.
Ontworpen voor gebruik in benzinemotoren van personenauto's, bestelwagens en lichte vrachtwagens. Motoroliën van deze klasse hebben eigenschappen die een betere bescherming bieden tegen koolstofafzettingen, oxidatie van motorolie en motorslijtage, in vergelijking met eerdere klassen, en bevatten ook additieven die beschermen tegen roest en corrosie van interne motoronderdelen. SG-motoroliën voldoen aan API CC-dieselmotoroliën en kunnen worden gebruikt waar SF-, SE-, SF / CC- of SE / CC-kwaliteiten worden aanbevolen.

API SF-klasse- motoroliën voor benzinemotoren sinds 1980 (verouderde klasse).
Deze motoroliën werden gebruikt in benzinemotoren vervaardigd in 1980-1989, met inachtneming van de aanbevelingen en instructies van de motorfabrikant. Biedt verbeterde oxidatiestabiliteit, verbeterde slijtagebescherming in vergelijking met baseline SE-oliën, evenals betere bescherming tegen koolstofafzettingen, roest en corrosie. Motoroliën van klasse SF kunnen worden gebruikt als vervanging voor eerdere klassen SE, SD of SC.

API SE-klasse- motoroliën van benzinemotoren geproduceerd sinds 1972 (verouderde klasse). Deze motoroliën werden gebruikt in benzinemotoren geproduceerd in 1972-79, evenals in sommige modellen in 1971. Extra bescherming in vergelijking met SC- en SD-motoroliën en kunnen worden gebruikt als vervanging voor deze categorieën.

SD API-klasse- motoroliën voor gebruik in benzinemotoren sinds 1968 (verouderde klasse). Motoroliën van deze klasse werden gebruikt in benzinemotoren van personenauto's en sommige vrachtwagens die in 1968-70 werden geproduceerd, evenals in sommige modellen van 1971 en later. De verbeterde bescherming in vergelijking met SC-motoroliën werd ook alleen gebruikt op aanraden van de motorfabrikant.

API SC-klasse- motoroliën voor benzinemotoren, geproduceerd sinds 1964 (verouderde klasse). Ze werden meestal gebruikt in motoren van personenauto's en sommige vrachtwagens die in 1964-1967 werden geproduceerd. Vermindert koolstofafzettingen en slijtage bij hoge en lage temperaturen en beschermt ook tegen corrosie.

API SB-klasse- motoroliën voor benzinemotoren met laag vermogen (verouderde klasse). Motoroliën uit de jaren '30 van de 20e eeuw, die een vrij lichte bescherming boden tegen slijtage en oxidatie, evenals anticorrosiebescherming van lagers in motoren die onder lichte belasting worden gebruikt. Motoroliën van deze klasse mogen alleen worden gebruikt als ze specifiek worden aanbevolen door de motorfabrikant.

API SA-klasse- motoroliën voor benzine- en dieselmotoren. Een verouderde klasse oliën voor gebruik in oude motoren die werken in omstandigheden en modi waarin de bescherming van onderdelen met additieven niet nodig is. Motoroliën van deze klasse mogen alleen worden gebruikt als ze worden aanbevolen door de motorfabrikant.

API-kwaliteiten voor dieselmotoren

API-klasse CJ-4- geldig vanaf 1 oktober 2006.
Deze klasse is speciaal ontworpen voor zware motoren. Voldoet aan de belangrijkste NOx- en PM-vereisten voor motoren van 2007. Voor CJ-4-oliën worden voor sommige indicatoren limieten ingevoerd: asgehalte minder dan 1,0%, zwavel 0,4%, fosfor 0,12%.
De nieuwe classificatie voldoet aan de vereisten van de eerdere API-categorieën CI-4 PLUS, CI-4, maar introduceert belangrijke wijzigingen in de vereisten als reactie op de behoeften van nieuwe motoren die voldoen aan de nieuwe emissienormen van 2007 en later.

API-klasse CI-4 (CI-4 PLUS)- een nieuwe bedrijfsklasse van motoroliën voor dieselmotoren. In vergelijking met API CI-4 worden de eisen voor het specifieke roetgehalte, evenals de vluchtigheid en oxidatie bij hoge temperaturen verhoogd. Wanneer gecertificeerd in deze classificatie, moet de motorolie worden getest in zeventien motortests.

API-klasse CI-4- de klasse werd geïntroduceerd in 2002.
Deze motoroliën worden gebruikt in moderne dieselmotoren met verschillende soorten injectie en drukregeling. Motorolie die aan deze klasse voldoet, moet geschikte detergent- en dispergeermiddeladditieven bevatten en heeft, in vergelijking met de CH-4-klasse, een verhoogde weerstand tegen thermische oxidatie en betere dispergerende eigenschappen. Bovendien zorgen dergelijke motoroliën voor een aanzienlijke vermindering van motorolieverspilling door vermindering van de vluchtigheid en vermindering van verdamping bij een bedrijfstemperatuur tot 370 ° C, onder invloed van gassen. De vereisten voor koude verpompbaarheid zijn ook versterkt, de hoeveelheid spelingen, toleranties en motorafdichtingen is vergroot door de vloeibaarheid van de motorolie te verbeteren.
De API CI-4-klasse is geïntroduceerd in verband met de opkomst van nieuwe, strengere eisen voor de ecologie en toxiciteit van uitlaatgassen, die worden gesteld aan motoren die vanaf 1 oktober 2002 zijn geproduceerd.

API-klasse CH-4- geldig vanaf 1 december 1998.
Motoroliën van deze klasse worden gebruikt in viertaktdieselmotoren die in hogesnelheidsmodus werken en voldoen aan de eisen van de in 1998 aangenomen normen en standaarden voor uitlaatgastoxiciteit.
API CH-4 motoroliën voldoen aan de strenge eisen van zowel Amerikaanse als Europese dieselmotorfabrikanten. De klasse-eisen zijn speciaal ontworpen voor gebruik in motoren die draaien op hoogwaardige brandstoffen met een zwavelgehalte tot 0,5%. Tegelijkertijd is de grondstof van deze motoroliën, in tegenstelling tot de API CG-4-klasse, minder gevoelig voor het gebruik van dieselbrandstof met een zwavelgehalte van meer dan 0,5%, wat vooral belangrijk is voor de landen van Zuid-Amerika , Azië en Afrika.
API CH-4-motoroliën voldoen aan hogere eisen en moeten additieven bevatten die klepslijtage en de vorming van koolstofafzettingen op interne oppervlakken effectiever voorkomen. Ze kunnen worden gebruikt als vervanging voor API CD, API CE, API CF-4 en API CG-4 motoroliën in overeenstemming met de aanbevelingen van de motorfabrikant.

API-klasse CG-4- de klas werd gepresenteerd in 1995.
Motoroliën van deze klasse worden aanbevolen voor viertakt-dieselmotoren van bussen, vrachtwagens en tractoren van het hoofd- en niet-hoofdlijntype, die worden gebruikt onder verhoogde belasting, evenals in hogesnelheidsmodi. API CG-4 motorolie is geschikt voor motoren die hoogwaardige brandstoffen gebruiken met een specifiek zwavelgehalte van niet meer dan 0,05%, evenals voor motoren waarvoor geen speciale vereisten voor brandstofkwaliteit zijn (het specifieke zwavelgehalte kan oplopen tot 0,5 % ).
Auto-oliën die zijn gecertificeerd volgens de API CG-4-klasse zouden slijtage van interne motoronderdelen, vorming van koolstofafzettingen op interne oppervlakken en zuigers, oxidatie, schuimvorming en roetvorming effectiever moeten voorkomen (deze eigenschappen zijn vooral nodig voor motoren van moderne hoofdlijnmotoren bussen en tractoren).
API CG-4-klasse is gecreëerd in verband met de goedkeuring in de Verenigde Staten van nieuwe eisen en normen voor de ecologie en toxiciteit van uitlaatgassen (revisie 1994). Motoroliën van deze klasse kunnen worden gebruikt in motoren waarvoor de klassen API CD, API CE en API CF-4 worden aanbevolen. Het belangrijkste nadeel dat het massale gebruik van deze klasse motoroliën, bijvoorbeeld in Oost-Europa en Azië, beperkt, is de aanzienlijke afhankelijkheid van de motoroliebron van de kwaliteit van de gebruikte brandstof.

API-klasse CF-2 (CF-II)- motoroliën ontworpen voor gebruik in tweetakt dieselmotoren die onder moeilijke omstandigheden worden gebruikt.
De klasse werd geïntroduceerd in 1994. Motoroliën van deze klasse worden meestal gebruikt in tweetaktdieselmotoren die onder hoge belastingomstandigheden werken. API CF-2-oliën moeten additieven bevatten die een verbeterde prestatiebescherming bieden tegen slijtage van interne motoronderdelen zoals cilinders en ringen. Bovendien moeten deze auto-oliën de ophoping van afzettingen op de interne oppervlakken van de motor voorkomen (verbeterde reinigingsfunctie).
API CF-2 motorolie heeft verbeterde eigenschappen en kan worden gebruikt in plaats van eerdere vergelijkbare oliën, op aanbeveling van de fabrikant.

API-klasse CF-4- motoroliën voor gebruik in viertakt dieselmotoren sinds 1990.
Motoroliën van deze klasse kunnen worden gebruikt in viertaktdieselmotoren, waarvan de bedrijfsomstandigheden verband houden met hogesnelheidsmodi. Voor dergelijke omstandigheden overtreffen de vereisten voor de kwaliteit van oliën de capaciteiten van de CE-klasse, daarom kunnen CF-4-motoroliën worden gebruikt in plaats van CE-oliën (afhankelijk van de toepasselijke aanbevelingen van de motorfabrikant).
API CF-4 motoroliën moeten geschikte additieven bevatten, die ervoor zorgen dat er minder auto-olie wordt verspild, evenals bescherming tegen koolstofafzettingen in de zuigergroep. Het belangrijkste doel van motoroliën van deze klasse is het gebruik in dieselmotoren van zware tractoren en andere voertuigen die worden gebruikt voor langeafstandsritten op snelwegen.
Daarnaast krijgen deze motoroliën soms de API CF-4/S dual grade toegewezen. In dit geval kunnen deze oliën, afhankelijk van de beschikbaarheid van de juiste aanbevelingen van de motorfabrikant, ook in benzinemotoren worden gebruikt.

API CF-klasse (CF-2, CF-4)- motoroliën voor dieselmotoren met indirecte injectie. Klassen werden geïntroduceerd van 1990 tot 1994. Een koppelteken geeft een twee- of viertaktmotor aan.
Klasse CF beschrijft motoroliën die worden aanbevolen voor gebruik in dieselmotoren met indirecte injectie, evenals andere typen dieselmotoren die werken op brandstoffen van verschillende kwaliteiten, waaronder die met een hoog zwavelgehalte (bijvoorbeeld meer dan 0,5% van de totale massa ).
CF-motoroliën bevatten additieven om zuigerafzettingen, slijtage en corrosie van koperen (koperen) lagers, die belangrijk zijn voor dit type motoren, te voorkomen en kunnen op de gebruikelijke manier worden verpompt, maar ook met een turbolader of compressor. Motoroliën van deze klasse kunnen worden gebruikt waar de CD-kwaliteitsklasse wordt aanbevolen.

CE API-klasse- motoroliën voor gebruik in dieselmotoren vanaf 1983 (verouderde klasse).
Motoroliën van deze klasse waren bedoeld voor gebruik in sommige zware turbomotoren, gekenmerkt door een aanzienlijk verhoogde werkcompressie. Het gebruik van dergelijke oliën was toegestaan ​​voor motoren met zowel lage als hoge assnelheden.
API CE-motoroliën worden aanbevolen voor dieselmotoren met een laag en hoog toerental die sinds 1983 zijn geproduceerd en die onder verhoogde belasting worden gebruikt. Afhankelijk van de beschikbaarheid van de juiste aanbevelingen van de motorfabrikant, kunnen deze oliën ook worden gebruikt in motoren waarvoor motoroliën van de CD-klasse werden aanbevolen.

API-klasse CD-II- motoroliën voor gebruik in zware dieselmotoren met een tweetaktcyclus (verouderde klasse).
De klasse werd in 1985 geïntroduceerd voor gebruik in tweetakt dieselmotoren en is in feite een evolutionaire ontwikkeling van de vorige API CD-klasse. Het belangrijkste doel van het gebruik van dergelijke motoroliën was het gebruik in zware krachtige dieselmotoren, die voornamelijk op landbouwmachines werden geïnstalleerd. Motoroliën van deze klasse voldoen aan alle werknormen van de vorige CD-klasse, bovendien zijn de eisen voor een zeer effectieve motorbescherming tegen koolstofafzettingen en slijtage aanzienlijk verhoogd.

API CD-klasse- motoroliën voor dieselmotoren met verhoogd vermogen, die werden gebruikt in landbouwmachines (verouderde klasse). De klasse werd in 1955 geïntroduceerd voor normaal gebruik in sommige dieselmotoren, zowel atmosferische als turbogeladen, met verhoogde cilindercompressie, waarbij een effectieve bescherming tegen roet en slijtage essentieel is. Motoroliën van deze klasse kunnen worden gebruikt in gevallen waarin de motorfabrikant geen aanvullende eisen stelt aan de kwaliteit van de brandstof (inclusief brandstof met een hoog zwavelgehalte).
Vergeleken met eerdere klassen zouden API CD-autooliën een betere bescherming bieden tegen corrosie van lagers en koolstofafzettingen bij hoge temperaturen in dieselmotoren. Motoroliën in deze klasse worden vaak "Caterpillar Series 3" genoemd omdat ze voldoen aan de Caterpillar Tractor Company Superior Lubricants (Series 3)-certificering.

API CC-klasse- motoroliën voor dieselmotoren die worden gebruikt bij middelzware belasting (verouderde klasse).
De klasse werd in 1961 geïntroduceerd voor gebruik in sommige motoren, zowel atmosferische als turbogeladen, die werden gekenmerkt door verhoogde compressie. Motoroliën van deze klasse werden aanbevolen voor motoren die werden gebruikt in modi met gemiddelde en hoge belasting.
Bovendien kunnen dergelijke oliën, met inachtneming van de aanbevelingen van de motorfabrikant, in sommige krachtige benzinemotoren worden gebruikt.
Vergeleken met eerdere soorten waren API CC-motoroliën vereist om een ​​hoger niveau van bescherming te bieden tegen koolstofafzettingen bij hoge temperaturen en lagercorrosie in dieselmotoren, evenals tegen roest, corrosie en koolstofafzettingen bij lage temperaturen in benzinemotoren.

CB API-klasse- motoroliën voor dieselmotoren die met middelmatige belasting werken (verouderde klasse).
De klasse werd in 1949 goedgekeurd als een evolutionaire ontwikkeling van de CA-klasse bij het gebruik van brandstoffen met een hoog zwavelgehalte zonder speciale kwaliteitseisen. API CB-motoroliën waren ook bedoeld voor gebruik in supercharged-motoren die in lichte en matige omstandigheden werden gebruikt. Deze klasse werd vaak aangeduid als "Appendix 1 Motoroliën", waarmee de nadruk werd gelegd op de naleving van de militaire regelgeving MIL-L-2104A Bijlage 1.

CA API-klasse- motoroliën voor licht belaste dieselmotoren (verouderde klasse).
Motoroliën van deze klasse zijn bedoeld voor gebruik in dieselmotoren die in lichte en gematigde modi op dieselbrandstof van hoge kwaliteit werken. In overeenstemming met de aanbevelingen van autofabrikanten kunnen ze ook worden gebruikt in sommige benzinemotoren die in gematigde modi worden gebruikt.
De klasse werd veel gebruikt in de jaren '40 en '50 van de vorige eeuw en kan niet worden gebruikt in moderne omstandigheden, als niet wordt voorzien door de eisen van de motorfabrikant.
API CA-motoroliën moeten eigenschappen hebben die bescherming bieden tegen koolstofafzetting op zuigerveren, evenals tegen corrosie van lagers in supercharged-motoren, waarvoor geen speciale eisen worden gesteld aan de kwaliteit van de gebruikte brandstof.

Heb je een hond. Maar ze spreekt geen mensentaal. Ze is echter in staat om hem te "begrijpen" door de commando's die ze tijdens de training heeft geleerd. Als je tegen een hond zegt die het commando "sneakers!" zoiets als "Rexic, breng me, pzhalsta, mijn tapuli met konijntjes", hij zou zijn oor misschien alleen naar de bijnaam kunnen leiden, maar hij zal geen pantoffels meenemen. API is dus een reeks commando's met behulp waarvan uw hond u begrijpt en doet wat u nodig heeft. Dat is voor een theepot ook erg versimpeld, maar de essentie is duidelijk denk ik.

Een API is een taal, een gereguleerde manier voor het ene computerprogramma om met het andere te communiceren om samen een gemeenschappelijke taak uit te voeren, wanneer het ene programma verzoeken voor het andere uitvoert. Application Programming Interface (API) - Application Programming Interface.

Hier is een primitieve analogie voor dummies die uit de hand werd geboren.

Stel je 5 buitenlanders voor die verschillende talen spreken en die samen moeten werken en leven, zeg maar in Rusland. Geen van hen kent de taal van de ander, terwijl ze één team nodig hebben, per rol, om een ​​taak uit te voeren, bijvoorbeeld elkaar voeden en de smaak van eten in het Russisch bespreken. Om dit te doen, moet je boodschappen doen, eten bereiden, de tafel dekken en de afwas bespreken tijdens de maaltijd. Zodat ze elkaar begrijpen en producten in de buitenwereld kunnen vinden, leren we ze een basisset Russische woorden. Stel dat we hebben:

1. Frans

2. Spanjaard

4. Engelsman

5. Italiaans

Laten we de rollen voor het uitvoeren van subtaken als volgt verdelen:

Eten winkelen: Frans en Spaans

Koken: Spaans, Duits en Engels

Tafelopstelling: Engels en Italiaans

Maaltijd en bespreking van de smaak van Gerechten: ALL

Om hen in staat te stellen al deze taken te voltooien, zullen we elk een reeks van die Russische woorden leren, waardoor ze, in samenwerking met elkaar en de externe omgeving, al deze taken kunnen voltooien. Zie de afbeelding hieronder.

Dus dat is het. De groep van onze buitenlandse vrienden is een groep computerprogramma's die met elkaar en met de externe omgeving moeten communiceren.

Taal en woorden die producten en elementaire handelingen aanduiden geproduceerd worden dit is de API- de normen waarmee onze buitenlandse vrienden in het Russisch met elkaar communiceren om alle toegewezen subtaken te vervullen.

API 1: Woorden voor producten en waar te koop
API 2: Woorden voor gerechten en kookmethodes
API 3: Woorden voor apparaten en bewerkingen met ze
API 4: Woorden voor smaak en evaluatie van voedsel

Het kan ingewikkelder zijn, bijvoorbeeld, laten we zeggen API 2 is Turks, API 3 is Chinees, API 4 is Hindi

Een voorbeeld voor dummies:

1. Er is een stopcontact. Daarachter gaat een enorme hoeveelheid technologie schuil. Maar om het te gebruiken, moet je een stekker hebben met een afstand tussen de staven van 3 cm en het stopcontact geeft 220v. Dit is de API van een enorm elektrisch productiesysteem.

2. En er is een strijkijzer. Hij heeft zijn eigen complexe systeem van werken. Maar om met het stopcontact te kunnen werken, voldoet het aan de API-vereisten - je hebt een stekker nodig met een afstand van 3 cm en wacht op 220 volt als reactie.

En dat is alles. De twee systemen zijn onafhankelijk, enorm en complex. Maar de API wordt gedaan om het zo gemakkelijk mogelijk te maken om met elkaar te verbinden.

API staat voor Application Programming Interface. Dit is een set functies, constanten, klassen en mogelijk andere objecten voor interactie met een bepaald onderdeel van het programma.

Ik denk dat het het meest begrijpelijk is om het met een voorbeeld te beschrijven. Stel dat iemand een rekenmachine heeft geschreven die u in uw programma wilt gebruiken. Deze rekenmachine moet op de een of andere manier worden aangepakt. Deze methoden voor interactie met de rekenmachine worden API genoemd. Ze kunnen anders zijn en zonder hun beschrijving kan er niets worden gedaan. Misschien heb je een functie om een ​​getal naar het geheugen te schrijven, een andere om een ​​actie uit te voeren en een derde om een ​​resultaat te krijgen. Of misschien heeft u één functie die twee cijfers en een bewerkingscode ertussen doorgeeft en onmiddellijk het antwoord retourneert.

Dergelijke beschrijvingen zijn gemaakt voor alles. Het besturingssysteem heeft een API, dit is een set functies waarmee een programma wordt gemaakt: een netwerkverbinding tot stand brengen, een venster tekenen, een druk op de knop verwerken. Voor sommige servers is de API een reeks functies die deze uitvoert. De browser gaat naar de wikipedia-site - deze gebruikt de API om u op verzoek een antwoord te geven.

We hebben een nieuw boek uitgebracht, "Contentmarketing op sociale media: hoe kom je in de hoofden van abonnees en word verliefd op je merk".

Abboneer op

API is een externe programmeerinterface voor een applicatie, die verwijst naar sites die een specifiek protocol gebruiken om informatie te verkrijgen en de ontwikkeling van programma's met betrekking tot interne services te vereenvoudigen.

Wat betekent API?

De eenvoudigste analogie voor het gebruik van de API is het werken aan een rekenmachine voor complexe berekeningen. Laten we zeggen dat je een probleem hebt, je kunt de essentie ervan begrijpen, vergelijkingen en grafieken maken, maar je weet niet hoe je rekenkundige bewerkingen met getallen moet uitvoeren. Naast u staat een rekenmachine die deze bewerkingen gemakkelijk kan uitvoeren. U weet niet wat er in de computer gebeurt en u hoeft het ook niet te weten. U geeft informatie in de ene vorm en ontvangt in een andere vorm die nodig is voor uw doeleinden.

Elke API werkt volgens dit principe. Het maakt je niet uit hoe het programma het antwoord ontvangt, welk pad het verzoek daarin doorloopt, hoe de berekeningen worden uitgevoerd. U bent maar van één ding zeker: als reactie ontvangt u gestandaardiseerde informatie over het succes van de operatie of de fout ervan.

Dankzij de API-interface verspil je geen tijd, geld en moeite aan het kopen van een "nieuwe fiets". U krijgt een werkende datapoort die de benodigde hoeveelheden gegevens voor uw ontwikkeling ontvangt en verzendt.

Voordelen:

  • Besparen op de ontwikkeling van uw interface.
  • Het is niet nodig om de nuances van het probleem te begrijpen.
  • API's zijn ontwikkeld door professionals en houden rekening met alle factoren van interne processen waarvan u zich misschien niet bewust bent bij het maken van uw oplossing.
  • Hiermee kunt u communiceren met services die zijn gesloten via andere protocollen.

minpuntjes:

  • Als de doelservice wordt bijgewerkt, krijgt de API niet altijd meteen de volledige functionaliteit.
  • Je kunt geen fouten opvangen en weet niet hoe het proces verloopt in de code van iemand anders.
  • De API geeft niet altijd het meest geoptimaliseerde resultaat in termen van tijd, omdat het is ontworpen om algemene gevallen te behandelen, niet privézaken.

API-voorbeelden

API-integratie is het proces van het verbinden van een applicatie met een externe data-interface. Werken met de API begint met het bestuderen van de documentatie en de gebruikte protocollen, en vervolgens het direct integreren van uw programma in de interface. Laten we eens kijken naar de meest populaire services die hun eigen API hebben.

VKAPI

De externe interface van interactie van het populaire sociale netwerk VKontakte met clients, maar ook met browser- en servertoepassingen. Hiermee kunt u berichten van community's, groepsomslagen en gebruikerspagina's beheren als u over de juiste toegangssleutels beschikt.

Alle verzoeken worden gedaan aan het adres https://api.vk.com/methode/

De schuine streep wordt gevolgd door de naam van de gebruikte API-methode en de GET-verzoekparameters worden doorgegeven. Het antwoord komt ook via HTTPS in JSON-formaat.

TELEGRAM BOT-API

Een van de meest populaire API's. Het wordt gebruikt om bots in de Telegram-messenger te besturen. Na het aanmaken van een bot via @botfather en het verkrijgen van de benodigde toegangssleutels, kun je beginnen met de interactie met de backend.

Aanvragen worden gedaan bij https://api.telegram.org/bot0000000:token/

Waarin, in plaats van bot0000000, de unieke id van uw bot wordt geplaatst en het token de geheime sleutel uitdrukt.

Verzoeken worden verzonden via HTTPS-verbindingen, de naam van de methode wordt aangegeven door een schuine streep naar het hoofdadres. Het antwoord is in JSON-indeling.

OPEN WEERKAART-API

Het is vaak nodig om weersinformatie te krijgen zonder widgets en betaalde applicaties van derden te gebruiken. De OpenWeatherMap-service komt te hulp met een open en gratis API. Nadat u zich hebt geregistreerd en identificatiegegevens hebt verkregen, kunt u vanuit server-side scripts verzoeken om weer over de hele wereld verzenden. Als reactie op de stads-ID geeft de bron de meest gedetailleerde informatie over het huidige weer en geeft een voorspelling voor de nabije toekomst.

Werkformaat: HTTP-overdracht via api.openweathermap.org/data/2.5/weather?id= met vermelding van het identificatienummer van de gewenste stad. Serverreactie: JSON.

GOOGLE MAPS-API

Wat is er mooier dan een interactieve wereldkaart op de website? Vooral als dit geen sjablooninvoeging is van Google Maps, maar uw persoonlijke editie van een populaire kaart met persoonlijke markeringsclusters. De kaart werkt samen met andere scripts op de site en verzendt informatie over klikken en coördinaten.

Soortgelijke mogelijkheden worden geboden door de JavaScript API Google Maps. De module is volledig gescript en werkt aan de browserzijde, dus we hebben geen HTTP-verzoeken van PHP en de vorming van headers aan de serverzijde nodig, zoals bij andere API's.

Het plaatsen van een label op een kaart ziet er bijvoorbeeld als volgt uit:

var mark = nieuwe google.maps.Marker ((
functie: mijnPOS,
kaart: kaart,
titel: "Hallo!"
});

Waarvoor wordt de API gebruikt en waarom is deze nuttig?

Er zijn nogal wat handige functies.

Het eerste aspect

U kunt een interactieve gebruikersinteractie tot stand brengen met sociale netwerken en instant messengers, de mogelijkheden van externe computersystemen gebruiken om wisselkoersen, het weer en andere belangrijke informatie weer te geven.

Met behulp van de API kunt u direct verbinding maken met servers van andere bronnen en softwareoplossingen, wat bij een normale implementatie weken van ontwikkeling zou vergen. Een API maakt het leven gemakkelijker als je geen unieke implementatie nodig hebt en prioriteit geeft aan betrouwbaarheid en beveiliging.

tweede aspect

Ben je eigenaar van complexe rekenkracht, een populaire dienst of een datawarehouse voor open of semi-private toegang, dan is het een goede zet om je eigen API op te zetten. Wat zal het geven:

  • Grote stroom van klanten.
  • Vereenvoudigde toegang tot uw services voor partners.
  • Gemak van statistische analyse van het gebruik van de dienst.

derde aspect

Bijna hetzelfde als de tweede. Maar zonder dat je een open source API hoeft te implementeren. Als je een portal hebt en er een mobiele applicatie voor wilt maken op Android / IOS, dan is het herschrijven van het systeem voor een enkele API de beste oplossing. De gehele datastructuur is gesystematiseerd. De site en de applicatie zullen via dezelfde datakanalen werken.

Windows API - een set functies van het besturingssysteem

De afkorting API lijkt veel beginnende programmeurs erg mysterieus en zelfs intimiderend te zijn. In feite is de Application Programming Interface (API) slechts een kant-en-klare set functies die applicatieontwikkelaars kunnen gebruiken. In het algemeen komt dit concept overeen met wat vroeger een bibliotheek van routines werd genoemd. API verwijst echter meestal naar een speciale categorie van dergelijke bibliotheken.

Tijdens de ontwikkeling van bijna elke voldoende complexe applicatie (MyApplication) voor de eindgebruiker, wordt een set van specifieke interne functies gevormd die worden gebruikt om dit specifieke programma te implementeren, de zogenaamde MyApplication API. Vaak blijkt echter dat deze functies ook effectief kunnen worden gebruikt om andere applicaties te maken, ook door andere programmeurs. In dit geval moeten de auteurs, gebaseerd op de strategie om hun product te promoten, beslissen over de vraag: stellen ze de toegang tot deze set open voor externe gebruikers of niet? Als het antwoord ja is in de beschrijving van het softwarepakket, verschijnt de zin als een positief kenmerk: "De kit bevat een open set API-functies" (maar soms voor extra geld).

Dus meestal betekent een API een reeks functies die deel uitmaken van één applicatie, maar die tegelijkertijd beschikbaar zijn voor gebruik in andere programma's. Zo heeft Excel, naast een interface voor de eindgebruiker, een set Excel API-functies die met name gebruikt kunnen worden bij het maken van applicaties met VB.

Dienovereenkomstig is de Windows API een set functies die deel uitmaakt van het besturingssysteem zelf en die tegelijkertijd beschikbaar is voor elke andere toepassing, inclusief die welke zijn geschreven met VB. In dit opzicht is de analogie met de BIOS / DOS-systeemonderbrekingsset, die eigenlijk een DOS-API is, redelijk gerechtvaardigd.

Het verschil ligt in het feit dat de samenstelling van de Windows API-functies enerzijds veel ruimer is in vergelijking met DOS en anderzijds niet veel van de tools bevat voor directe controle van computerbronnen die beschikbaar waren voor programmeurs in het vorige besturingssysteem. Bovendien wordt toegang tot de Windows API verkregen door middel van normale procedurele aanroepen, en worden DOS-functieaanroepen gedaan via een speciaal processormachine-commando genaamd Interrupt.

Waarom heb je Win API nodig voor VB-programmeurs?

Ondanks het feit dat VB een enorme verscheidenheid aan functies heeft, in het proces van min of meer serieuze ontwikkeling, blijkt dat hun capaciteiten vaak niet voldoende zijn om de noodzakelijke taken op te lossen. Tegelijkertijd beginnen beginnende programmeurs vaak te klagen over de tekortkomingen van VB en denken ze na over het veranderen van de tool, niet vermoedend dat er een enorme set tools op hun computer staat en dat je ze gewoon moet kunnen gebruiken.

Bij kennismaking met de Win-API ontdekt men dat veel ingebouwde VB-functies niets meer zijn dan oproepen naar de overeenkomstige systeemprocedures, maar alleen geïmplementeerd in de vorm van de syntaxis van deze taal. Met dit in gedachten wordt de noodzaak om de API te gebruiken bepaald door de volgende opties:

  1. API-functies die volledig zijn geïmplementeerd als ingebouwde VB-functies. Desalniettemin is het in dit geval soms ook nuttig om over te schakelen naar het gebruik van de API, omdat dit de prestaties soms aanzienlijk kan verhogen (met name door het ontbreken van onnodige transformaties van de doorgegeven parameters).
  2. Ingebouwde VB-functies implementeren slechts een speciaal geval van de bijbehorende API-functie. Dit is een vrij veel voorkomende optie. De CreateDirectory API is bijvoorbeeld krachtiger dan de ingebouwde VB MkDir-operator.
  3. Een groot aantal API-functies heeft helemaal geen analogen in de huidige versie van de VB-taal. U kunt bijvoorbeeld een map niet verwijderen met VB - u moet hiervoor de functie DeleteDirectory gebruiken.

Ook moet worden benadrukt dat sommige API-functies (hun aandeel in de Win API is erg klein) niet kunnen worden aangeroepen vanuit VB-programma's vanwege een aantal taalbeperkingen, bijvoorbeeld vanwege het ontbreken van de mogelijkheid om met geheugenadressen te werken. Maar in sommige gevallen kunnen niet-triviale programmeertechnieken helpen (met name in het geval van dezelfde adressen).

Het persoonlijke standpunt van de auteur is dat in plaats van het uitbreiden van versie naar versie van ingebouwde VB-functies, een goede beschrijving van de meest voorkomende API-functies moet worden gegeven. Tegelijkertijd zou ik ontwikkelaars willen adviseren om niet te wachten op een nieuwe versie van de tool met geavanceerde functies, maar om de bestaande Win API nader te bestuderen - het is waarschijnlijk dat de mogelijkheden die u nodig hebt al in de VB 1.0-versie van de release van 1991.

Hoe Win API te leren

Dit is niet zo'n gemakkelijke vraag, aangezien het aantal Win32 API-functies wordt geschat op ongeveer 10 duizend (niemand kent het exacte aantal, zelfs Microsoft niet).

De VB (versies 4-6) bevat een bestand met de beschrijving van Win API-declaraties - WIN32API.TXT (we zullen u later meer vertellen over het gebruik ervan). Maar ten eerste kan het worden gebruikt om informatie te verkrijgen over het doel van een bepaalde functie en zijn parameters, alleen door de gebruikte geheugensteunnamen, en ten tweede is de lijst met functies in dit bestand verre van compleet. Er waren eens (zeven jaar geleden) in VB 3.0 speciale helpbestanden die de Win16 API-functies beschrijven. Echter, al in v.4.0 is deze nuttige informatie met een gebruiksvriendelijke interface verdwenen.

Uitgebreide informatie over de Win32 API is te vinden in de Platform Software Development Kit Help, die met name te vinden is op de MSDN-bibliotheek-cd's die zijn meegeleverd met VB 5.0 en 6.0 Enterprise Edition en Office 2000 Developer Edition. Het is echter helemaal niet eenvoudig om daar de nodige informatie te vinden en te begrijpen. Om nog maar te zwijgen van het feit dat alle beschrijvingen daar gegeven worden in relatie tot de C-taal.

De boeken van de bekende Amerikaanse expert Daniel Appleman worden in de wereld algemeen erkend als een gids voor het leren van API-programmering in de VB-omgeving. Zijn serie Dan Appleman's Visual Basic Programmer's Guide to the Windows API (voor Win16, Win32, toegepast op verschillende versies van VB) is sinds 1993 consequent een van de bestsellers geweest voor VB-programmeurs. Dan Appleman's VB 5.0 Programmer's Guide to the Win32 API, gepubliceerd in 1997, werd naar de auteur gebracht vanuit de Verenigde Staten door een vriend die het vond in de eerste boekhandel in een klein provinciestadje.

Dit boek, meer dan 1.500 pagina's, bevat een algemene methodologie voor API-programmering in de VB-omgeving, evenals meer dan 900 functies. De bijbehorende cd-rom bevat de volledige tekst van het boek en alle programmavoorbeelden, evenals enkele extra hoofdstukken die niet in de gedrukte versie waren opgenomen. In 1999 bracht Dan Appleman Dan Appleman's Win32 API Puzzle Book en Tutorial for Visual Basic Programmers uit, die informatie bevat over nog eens 7.600 functies (zij het minder grondig).

Win API en Dynamic Link Library (DLL)

De Win API-set is geïmplementeerd als dynamische DLL's. Verder zullen we het hebben over de technologie van het gebruik van DLL's in de VB-omgeving aan de hand van het voorbeeld van de bibliotheken die deel uitmaken van de Win API. Er zijn echter een paar belangrijke punten die u moet maken als u het over DLL's hebt.

In dit geval bedoelen we met DLL de traditionele versie van binaire dynamische bibliotheken die directe applicatie-aanroepen bieden aan de noodzakelijke procedures - subroutines of functies (op vrijwel dezelfde manier als bij het aanroepen van procedures binnen een VB-project). Dergelijke bibliotheken kunnen worden gemaakt met verschillende tools: VC ++, Delphi, Fortran, behalve VB (laten we eens kijken wat er in versie 7.0 verschijnt) - de laatste kan alleen ActiveX DLL's doen, die toegankelijk zijn via de OLE-automatiseringsinterface.

Meestal hebben DLL-bestanden de extensie .DLL, maar dit is niet nodig (voor Win16 werd vaak de extensie .EXE gebruikt); externe apparaatstuurprogramma's worden geïdentificeerd met .DRV.

Zoals we hebben opgemerkt, is het moeilijk om het exacte aantal Windows API-functies en de bestanden die ze bevatten te bepalen, maar ze bevinden zich allemaal in de systeemmap. In dit opzicht is het beter om de samenstelling van de bibliotheken in de kernel van het besturingssysteem en de hoofdbibliotheken met belangrijke extra functies te benadrukken.

Nu een paar tips.

Tip 1. Zorg ervoor dat uw DL-advertentie correct is opgemaakt L-procedures

De daadwerkelijke aanroep van DLL-procedures in het programma ziet er precies hetzelfde uit als de "gewone" Visual Basic-procedures, bijvoorbeeld:

Bel DllName ([argumentenlijst])

Om externe DLL-functies (inclusief Win API) te gebruiken, moeten ze echter in het programma worden gedeclareerd met behulp van de verklaring Declare, die er als volgt uitziet:

Declareer subprocedurenaam Lib _ "Bibliotheeknaam" _ [([Argumentenlijst])]

Declareer functie Functienaam _ Lib "Bibliotheeknaam" _ [([ArgumentLijst])]

Hier worden tussen vierkante haken optionele elementen van de operator gegeven, variabele uitdrukkingen zijn cursief, de rest van de woorden zijn trefwoorden. Het help-systeem geeft een redelijk goede beschrijving van de syntaxis van de operator, dus voor nu zullen we slechts enkele punten opmerken.

Declaraties van externe functies moeten in de sectie Algemene declaraties van de module worden geplaatst. Als u het in een formuliermodule plaatst, moet u het sleutelwoord Private specificeren (deze verklaring is alleen beschikbaar binnen deze module) - dit is een beperking voor alle procedures van de formuliermodule.

De Win32 API-set is alleen geïmplementeerd als functies (er waren veel Subs in de Win16 API). De meeste zijn functies van het type Lang, die meestal een code voor het voltooien van een bewerking retourneren.

De verklaring Declare verscheen in MS Basic in de tijd van DOS en werd ook gebruikt om de interne procedures van een project aan te geven. In Visual Basic is dit niet vereist omdat de verklaring van interne procedures automatisch hun sub- of functiebeschrijving is. In vergelijking met Basic / DOS is het in de nieuwe beschrijving verplicht om de naam van het bibliotheekbestand aan te geven waar de vereiste procedure zich bevindt. De Wip API-bibliotheken bevinden zich in de Windows-systeemmap, dus alleen de naam van het bestand is voldoende. Als u verwijst naar een DLL die zich op een willekeurige locatie bevindt, moet u het volledige pad naar dit bestand noteren.

De omschrijving van het Declare-statement neemt meestal veel ruimte in beslag en past niet op één regel in het codevenster. Daarom raden we aan dat u zich houdt aan een specifiek regelterugloopschema bij het schrijven van toepassingen, bijvoorbeeld:

Declareer functie GetTempPath _ Lib "kernel32" Alias ​​​​"GetTempPathA" _ (ByVal nBufferLength As Long, _ ByVal lpBuffer As String) Zo lang

In dit geval zijn alle hoofdelementen van de beschrijving op verschillende regels uit elkaar geplaatst en zijn daarom gemakkelijk te lezen.

Tip 2. Wees vooral voorzichtig bij het werken met DLL-functies

Het gebruik van Win API en verschillende DLL-functies breidt de functionaliteit van VB aanzienlijk uit en verbetert vaak de prestaties van programma's. De straf hiervoor is echter het risico van verminderde toepassingsbetrouwbaarheid, vooral tijdens het debuggen.

Een van de belangrijkste voordelen van de VB-omgeving is de betrouwbaarheid van het programma-ontwikkelingsproces: onder controle van de interpreter kan de programmacode in theorie het werk van Windows en VB zelf niet verstoren. De programmeur is misschien niet erg voorzichtig met het correct doorgeven van parameters aan de aangeroepen functies - dergelijke fouten zullen gemakkelijk door de interpreter zelf worden gedetecteerd, hetzij tijdens het vertalen van de code, hetzij tijdens de uitvoering ervan. In het meest onaangename geval wordt de verwerkingsmodus gewoon onderbroken, met een indicatie van waar en waarom de fout is opgetreden.

Door Windows API's of andere DLL's te gebruiken, wordt deze controle over gegevensoverdracht en code-uitvoering buiten de VB-omgeving direct verwijderd. Daarom kan een fout in de aanroep van externe functies leiden tot onbruikbaarheid van zowel VB als het besturingssysteem. Dit geldt met name in de fase van programmaontwikkeling, wanneer de aanwezigheid van fouten heel natuurlijk is. Dus, gebruikmakend van de bredere mogelijkheden van de functies van de basislaag van het systeem, neemt de programmeur de verantwoordelijkheid voor het juiste gebruik ervan.

Het probleem wordt verergerd door het feit dat verschillende programmeertalen verschillende manieren gebruiken om parameters tussen procedures door te geven. (Precies, er worden standaard verschillende overdrachtsmethoden gebruikt, omdat veel talen meerdere methoden kunnen ondersteunen.) De Win API's zijn geïmplementeerd in C / C ++ en gebruiken de conventies voor het doorgeven van parameters van dat systeem, die verschillen van de gebruikelijke VB.

In dit verband moet worden opgemerkt dat het verschijnen van analogen van API-functies die in VB zijn ingebouwd, juist wordt gerechtvaardigd door de aanpassing van de laatste aan de VB-syntaxis en de implementatie van het bijbehorende controlemechanisme voor gegevensuitwisseling. Merk ook op dat in het stadium van experimentele foutopsporing van de applicatie, bij het maken van een uitvoerbare module, het beter is om de P-code compilatieoptie te gebruiken in plaats van Native Code (machinecode). In het eerste geval zal het programma draaien onder de controle van de tolk - langzamer dan machinecode, maar betrouwbaarder vanuit het oogpunt van mogelijke foutieve impact op het besturingssysteem en een handiger modus bieden voor het identificeren van mogelijke fouten.

Tip 3: Dan Appleman's tien best practices voor robuuste API-programmering in VB

Het gebruik van een API-functie vereist meer zorgvuldige programmering met behulp van enkele niet zo bekende methoden voor het aanroepen van procedures (vergeleken met VB). Verder zullen we deze vragen voortdurend behandelen. En nu presenteren we een samenvatting van het advies over dit onderwerp geformuleerd door Dan Appleman (hun eerste versie verscheen in 1993) met enkele van onze toevoegingen en opmerkingen.

1. Onthoud ByVal. De meest voorkomende fout die wordt gemaakt bij het openen van API- en DLL-functies is het onjuiste gebruik van het ByVal-sleutelwoord: ze vergeten het te gebruiken of, omgekeerd, plaatsen het wanneer het niet nodig is.

Deze voorbeelden tonen het effect van de ByVal-operator op het doorgeven van parameters

Parametertype: Met ByVal Zonder ByVal
Geheel getal Duwt een 16-bits geheel getal op de stapel Het 32-bits adres van een 16-bits geheel getal op de stapel geduwd
Lang Een 32-bits geheel getal wordt op de stapel geduwd Het 32-bits adres van een 32-bits geheel getal op de stapel geduwd
Snaar De string wordt geconverteerd naar het formaat dat wordt gebruikt in C (gegevens en een afsluitende null-byte). 32-bits newline-adres wordt op de stapel geduwd De VB-regeldescriptor wordt op de stapel geduwd. (Dergelijke descriptors worden nooit gebruikt door de Windows API zelf en worden alleen herkend in DLL's die specifiek voor VB zijn geïmplementeerd.)

Er moet hier worden herinnerd dat parameters in elk programmeersysteem, inclusief VB, op twee manieren worden doorgegeven: door verwijzing (ByRef) of door waarde (ByVal). In het eerste geval wordt het adres van de variabele doorgegeven (deze optie wordt standaard gebruikt in VB), in het tweede geval - de waarde ervan. Het fundamentele verschil is dat door middel van een referentie de gewijzigde waarde van de doorgegeven parameter wordt teruggestuurd naar het aanroepende programma.

Experimenteer met deze programma's om erachter te komen:

Dim v As Integer v = 2 Bel MyProc (v) MsgBox “v =“ & v Sub MyProc (v As Integer) v = v + 1 End Sub

Door dit voorbeeld uit te voeren, ontvangt u een bericht met de waarde van de variabele gelijk aan 3. Feit is dat in dit geval het adres van de variabele v, fysiek gemaakt in het aanroepende programma, wordt doorgegeven aan de MyProc-subroutine. Verander nu de beschrijving van de procedure in:

Sub MyProc (ByVal v As Integer)

Als gevolg hiervan ontvangt u bij het uitvoeren van de test v = 2, omdat alleen de oorspronkelijke waarde van de variabele aan de procedure wordt doorgegeven - het resultaat van de bewerkingen die ermee worden uitgevoerd, wordt niet teruggestuurd naar het aanroepende programma. De modus voor doorverbinden op waarde kan ook als volgt worden gewijzigd met behulp van de oproepoperator:

Sub MyProc (v As Integer) ... Bel MyProc ((v)) '(v) - haakjes geven overdracht op waarde _ modus aan.

Wanneer echter wordt verwezen naar interne VB-procedures, is het ByVal-sleutelwoord niet toegestaan ​​in de Call-instructie - in plaats daarvan worden haakjes gebruikt. Hier is een verklaring voor.

In het klassieke geval (C, Fortran, Pascal) hangt het verschil tussen ByRef en ByVal af van wat er precies op de gegevensuitwisselingsstack wordt geduwd - het adres van een variabele of de waarde ervan. In Basic wordt historisch gezien de ByVal-versie van software-emulatie gebruikt - het adres staat altijd op de stapel, maar alleen wanneer het wordt doorgegeven door waarde, wordt hiervoor een tijdelijke variabele gemaakt. Om deze twee opties (Classic en Basic) te onderscheiden, worden verschillende manieren gebruikt om de ByVal-modus te beschrijven. Merk op dat de emulatie van de ByVal-modus in VB een hogere programmabetrouwbaarheid biedt: door de vorm van de aanroep te verwarren, loopt de programmeur alleen het risico dat de gecorrigeerde waarde van de variabele wel (of niet) terugkeert naar het aanroepende programma. In de "klassieke" versie kan een dergelijke verwarring leiden tot een fatale fout tijdens de uitvoering van de procedure (bijvoorbeeld wanneer in plaats van een geheugenadres een variabele waarde gelijk aan bijvoorbeeld nul wordt gebruikt).

DLL-functies zijn geïmplementeerd volgens "klassieke" principes en vereisen daarom een ​​verplichte beschrijving van hoe gegevens worden uitgewisseld met elk van de argumenten. Het is voor dit doel dat functiedeclaraties via de Declare-beschrijving (meer precies, een lijst met doorgegeven argumenten) dienen. Meestal wordt het doorgeven van parameters aan een Windows API of DLL-functie gedaan met behulp van het ByVal-sleutelwoord. Bovendien kan het zowel in het Declare-statement als direct bij het aanroepen van de functie worden opgegeven.

De gevolgen van het onjuist doorgeven van parameters zijn eenvoudig te voorspellen. Als u een duidelijk ongeldig adres ontvangt, wordt u gevraagd om een ​​GPF-bericht (General Protection Fault). Als de functie een waarde krijgt die overeenkomt met een geldig adres, dan komt de API-functie in het gebied van iemand anders (bijvoorbeeld de Windows-kernel) met alle catastrofale gevolgen van dien.

2. Controleer het type van de doorgegeven parameters. Het juiste aantal en type doorgegeven parameters zijn even belangrijk. De argumenten die in de Declare zijn gedeclareerd, moeten overeenkomen met de verwachte parameters in de API-functie. De meest voorkomende fout bij het doorgeven van parameters houdt verband met het verschil tussen NULL en strings met een lengte van nul - onthoud dat ze niet hetzelfde zijn.

3. Controleer het retourtype.

VB is vrij tolerant ten aanzien van typemismatches in functieretourwaarden, aangezien numerieke waarden meestal via registers worden geretourneerd in plaats van via de stapel. De volgende regels helpen u bij het bepalen van de juiste waarde die wordt geretourneerd door een API-functie:

  • Een DLL-functie die geen waarde retourneert (analoog aan void in 'C') moet worden gedeclareerd als een VB Sub.
  • een API-functie die een geheel getal retourneert (Integer of Long) kan worden gedefinieerd als een Sub of een Functie die een waarde van het juiste type retourneert.
  • geen van de API-functies retourneert drijvende-kommagetallen, maar sommige DLL's retourneren dit gegevenstype mogelijk.

4. Gebruik de "As Any"-constructie met grote zorg. Veel Windows API-functies hebben de mogelijkheid om parameters van verschillende typen te accepteren en de constructie As Any te gebruiken (het type wordt geïnterpreteerd afhankelijk van de waarde van andere doorgegeven parameters).

Een goede oplossing in dit geval zou zijn om meerdere functie-aliassen te gebruiken, waarbij twee of meer declaraties voor dezelfde functie worden gemaakt, waarbij elk van de beschrijvingen parameters van een specifiek type specificeert.

5. Vergeet niet de strings te initialiseren. Er zijn veel functies in de Win API die informatie retourneren door gegevens in stringbuffers te laden die als parameter zijn doorgegeven. In je programma lijkt het alsof je alles goed doet: vergeet ByVal niet, geef de parameters correct door aan de functie. Maar Windows kan niet controleren hoe groot het geheugen voor de string is. De lijngrootte moet groot genoeg zijn voor alle gegevens die erin kunnen worden geplaatst. Het is de verantwoordelijkheid van de VB-programmeur om een ​​buffer van de juiste grootte te reserveren.

Opgemerkt moet worden dat in 32-bits Windows, bij gebruik van strings, de conversie wordt uitgevoerd van Unicode (double-byte-codering) naar ANSI (single-byte) en vice versa, rekening houdend met de nationale instellingen van het systeem. Daarom is het soms handiger om byte-arrays te gebruiken in plaats van stringvariabelen om buffers te reserveren. (Hierover hieronder meer.)

Meestal kunt u met de Win API-functies zelf de maximale blokgrootte definiëren. In het bijzonder moet je soms hiervoor een andere API-functie aanroepen, die de blokgrootte zal "vragen". Met GetWindowTextLength kunt u bijvoorbeeld de grootte van de rij bepalen die nodig is voor de venstertitel, die wordt opgehaald door de functie GetWindowText. In dit geval zorgt Windows ervoor dat je niet naar het buitenland gaat.

6. Zorg ervoor dat u Option Explicit gebruikt.

7. Controleer de parameterwaarden en retourneer waarden zorgvuldig. VB heeft goede typecontrolemogelijkheden. Dit betekent dat wanneer u een ongeldige parameter probeert door te geven aan een VB-functie, het ergste dat kan gebeuren, is dat u een foutmelding krijgt van VB. Maar dit mechanisme werkt helaas niet bij toegang tot Windows API-functies.

Windows 9x heeft verbeterde parametervalidatie voor de meeste API-functies. Daarom veroorzaakt de aanwezigheid van een fout in de gegevens meestal geen fatale fout, maar het is niet zo eenvoudig om te bepalen wat de oorzaak is.

Hier kunt u verschillende manieren gebruiken om dit type fout te debuggen:

  • gebruik de eenstaps-foutopsporingsmodus of de opdracht Debug.Print om elke verdachte API-aanroep te controleren. Controleer de resultaten van deze aanroepen om er zeker van te zijn dat alles binnen de normale limieten valt en dat de functie correct is voltooid;
  • gebruik een Windows-foutopsporingsprogramma zoals CodeView en een Windows-foutopsporingsprogramma (beschikbaar in de Windows SDK). Deze tools kunnen parameterfouten detecteren en in ieder geval bepalen welke API-functie de fout veroorzaakt;
  • gebruik aanvullende tools van derden om de soorten parameters en de geldigheid van hun waarden te controleren. Dergelijke tools kunnen niet alleen parameterfouten vinden, maar zelfs verwijzen naar de regel VB-code waar de fout is opgetreden.

Bovendien is het absoluut noodzakelijk om het resultaat van de API-functie te controleren.

8. Onthoud dat gehele getallen in VB en Windows niet hetzelfde zijn. Allereerst moet worden bedacht dat de term "Integer" in VB een 16-bits getal betekent, in de Win-documentatie 32 - 32-bit. Ten tweede zijn gehele getallen (Integer en Long) in VB getekende hoeveelheden (dat wil zeggen, één cijfer wordt gebruikt als een teken, de rest wordt gebruikt als de mantisse van een getal), in Windows worden alleen niet-negatieve getallen gebruikt. Met deze omstandigheid moet rekening worden gehouden wanneer u de doorgegeven parameter vormt met behulp van rekenkundige bewerkingen (bijvoorbeeld het adres berekenen door een grondtal en een offset toe te voegen). De standaard rekenfuncties van VB zijn hiervoor niet geschikt. Hoe te zijn in dit geval, we zullen afzonderlijk praten.

9. Let goed op de namen van de functies. In tegenstelling tot Win16 zijn de namen van alle Win32 API-functies gevoelig voor het exacte gebruik van hoofdletters en kleine letters (wat niet het geval was in Win16). Gebruik je ergens een kleine letter in plaats van een hoofdletter of andersom, dan wordt de gewenste functie niet gevonden. Zorg er ook voor dat u het achtervoegsel A of W correct gebruikt in functies die stringparameters gebruiken. (Zie hieronder voor meer informatie hierover.)

10. Sla je werk vaker op. Fouten gerelateerd aan onjuist gebruik van DLL en Win API kunnen leiden tot een abnormale beëindiging van de VB-omgeving, en mogelijk het gehele besturingssysteem. U moet ervoor zorgen dat de code die u schrijft, is opgeslagen voordat u de test uitvoert. Het eenvoudigste is om de modus voor automatische opname van projectmodules in te stellen voordat het project in de VB-omgeving wordt gestart.

Na het lezen van de vorige tip, denk je misschien dat het gebruik van Win API-functies een riskante onderneming is. Tot op zekere hoogte is dit waar, maar alleen in vergelijking met de veilige programmering door VB zelf. Maar met hun vakkundige toepassing en kennis van mogelijke valkuilen is dit risico minimaal. Bovendien is het vaak gewoonweg onmogelijk om het gebruik van de Win API volledig te verlaten - ze zullen nog steeds nodig zijn voor elke serieuze ontwikkeling.

Bovendien noemden we eerder de valkuilen voor een brede klasse van DLL's. In het geval van de Win API is alles veel eenvoudiger, omdat de vorm van het aanroepen van deze functies hier duidelijk is verenigd. In dit geval moeten de volgende hoofdpunten in gedachten worden gehouden:

  1. Win32 API-functies zijn slechts functies, dat wil zeggen procedures van het type Functie (er waren veel Subs in de Win16 API). Dit zijn allemaal functies van het type Long, dus hun beschrijvingen zijn in de volgende vorm geschreven: Declare Function name ... As Long 'het type van de functie _ is expliciet gedefinieerd

    Declareer Functienaam & 'functietype _ is gedefinieerd met een achtervoegsel'

    Een aanroep van een API-functie ziet er als volgt uit:

Resultaat & = ApiName & ([ Lijst met argumenten]
  1. Meestal is de geretourneerde waarde van een functie een exit-code voor een bewerking. Bovendien betekent een waarde die niet nul is in dit geval een normale voltooiing, een waarde nul betekent een fout. Meestal (maar niet altijd) kunt u de aard van de fout verduidelijken door de functie GetLastError aan te roepen. De beschrijving van deze functie ziet er als volgt uit: Declare Function GetLastError & Lib “kernel32” ()

    AANDACHT! Wanneer u in VB werkt, is het beter om de eigenschap LastDLLError van het Err-object te gebruiken om de waarde van de gekwalificeerde foutcode te krijgen, omdat VB soms de GetLastError-functie reset tussen de API-aanroep en de voortzetting van de uitvoering van het programma.

    U kunt de code die wordt geretourneerd door GelLastError interpreteren met behulp van de constanten die zijn geschreven in het API32.TXT-bestand, met namen die beginnen met het achtervoegsel ERROR_.

    De meest voorkomende fouten hebben de volgende codes:

    • ERROR_INVALID_HANDLE = 6 & - ongeldige handle
    • ERROR_CALL_NOT_IMPLEMENTED = 120 & - roep in Windows 9x een functie aan die alleen beschikbaar is voor Windows NT
    • ERROR_INVALID_PARAMETER = 87 & - ongeldige parameterwaarde

    Veel functies retourneren echter de waarde van een gevraagde parameter (OpenFile retourneert bijvoorbeeld een bestandsdescriptorwaarde). In dergelijke gevallen wordt de fout geïdentificeerd door een andere speciale Return & value, meestal 0 of –1.

  2. Win32-API's gebruiken strikt vaste manieren om de eenvoudigste gegevenstypen door te geven. a) ByVal ... Zo lang

    Lange variabelen doen ten minste 80% van het argument doorgeven. Merk op dat het argument altijd gevolgd door het ByVal-trefwoord, wat onder andere betekent dat er een eenrichtingsgegevensoverdracht plaatsvindt - van een VB-programma naar een API-functie.

    B) ByVal ... As String

    Dit type gegevensoverdracht komt ook vrij vaak voor, en ook met een argument altijd ByVal wordt toegepast. Wanneer de API-functie wordt aangeroepen, wordt het adres van de string op de stapel geschreven, dus in dit geval is tmogelijk. Er zijn verschillende valkuilen waarmee u rekening moet houden bij het werken met snaren.

    Ten eerste is het geheugen voor een tekenreeks gereserveerd in het aanroepende programma, dus als de API-functie tekenreeksen vult, moet u een tekenreeks van de vereiste grootte maken voordat u deze aanroept. De functie GetWindowsDirectory retourneert bijvoorbeeld het pad naar de Windows-map, die per definitie niet langer mag zijn dan 144 tekens. Dienovereenkomstig zou een aanroep van deze functie er ongeveer zo uit moeten zien:

    WinPath $ = Spatie $ (144) 'reserveer een string van _ 144 tekens Resultaat & = GetWindowsDirectory & (WinTath $, 144) _' vul de buffer 'Resultaat & - het werkelijke aantal tekens in de _ mapnaam WinPath $ = Links $ (WinPath, Resultaat &)

    Het tweede probleem is dat wanneer de API-functie wordt aangeroepen, de originele string wordt geconverteerd naar een interne representatie, en wanneer de functie wordt afgesloten, vice versa. Als deze operatie in de dagen van Win16 alleen bestond uit het toevoegen van een nulbyte aan het einde van een string, dan werd dit met de komst van Win32 aangevuld met de transformatie van de dubbelbyte Unicode-codering naar ANSI en vice versa. (Dit werd in detail besproken in het artikel "Kenmerken van het werken met stringvariabelen in VB", ComputerPress 10'99 en 01'2000). Voor nu, laten we er rekening mee houden dat het gebruik van de ByVal ... As String-constructie, u alleen strings kunt uitwisselen met tekengegevens.

    B) ... Zoals elke

    Dit betekent dat een geheugenbufferadres op de stapel wordt geduwd, waarvan de inhoud bijvoorbeeld door de API-functie wordt geïnterpreteerd, afhankelijk van de waarde van andere argumenten. As Any kan echter alleen worden gebruikt in een Declare-instructie - voor een specifieke aanroep van een functie moet een specifieke variabele als argument worden gedefinieerd.

    D) ... Als UserDefinedType

    Dit ontwerp wordt ook vaak gebruikt wanneer het nodig is om gegevens (meestal in beide richtingen) met enige structuur uit te wisselen. In feite is deze constructie een soort concrete implementatie van de As Any transmissievorm, maar in dit geval is de functie geconfigureerd voor een vaste constructie.

    De vorm van de datastructuur wordt bepaald door een specifieke API-functie en het is de verantwoordelijkheid van de programmeur om deze correct te beschrijven en te reserveren in het aanroepende programma. Dit ontwerp altijd gebruikt door zonder woorden ByVal, dat wil zeggen, in dit geval wordt overdracht door verwijzing uitgevoerd - het adres van de variabele wordt naar de stapel geschreven.

Een voorbeeld van het aanroepen van een API-functie

Laten we het bovenstaande illustreren met een voorbeeld van het gebruik van twee handige functies voor het werken met bestanden - lopen en lread, die als volgt worden beschreven:

Declare Function lopen Lib "kernel32" _ Alias ​​​​"_lopen" (_ ByVal lpFileName As String, _ ByVal wReadWrite As Long) As Long Declare Function lread Lib "kernel32" _ Alias ​​​​"_lread" (_ ByVal hFile As Long, lpBuffer zoals elk, _ ByVal wBytes zo lang) zo lang

In VB zijn hun tegenhangers - in dit geval de exacte - de Open en Get-instructies (voor binaire modus). Laten we meteen letten op het gebruik van het Alias-trefwoord in een functiedeclaratie - dit is precies het geval wanneer u niet zonder kunt. Echte functienamen in de bibliotheek beginnen met een onderstrepingsteken (typische C-stijl), wat niet is toegestaan ​​in VB.

De bewerking voor het openen van een bestand kan er als volgt uitzien:

Const INVALID_HANDLE_VALUE = -1 'ongeldige _ descriptorwaarde lpFileName $ = "D: \ calc.bas"' bestandsnaam wReadWrite & = 2 'lees-schrijfmodus hFile & = lopen (lpFileName $, wReadWrite &) _' bestandsdescriptor definiëren If hFile & = INVALID_HANDLE_VALUE Dan _ 'bestandsopeningsfout' verduidelijk de foutcode CodeError & = Err.LastDllError 'CodeError & = GetLastError _' deze constructie werkt niet End If

Er zijn hier twee aandachtspunten:

  • als de waarde van de functie krijgen we de waarde van de bestandsdescriptor. De fout komt overeen met de waarde –1;
  • alleen in dit geval werkt de aanroep van de GetLastError-functie niet - om de opgegeven foutwaarde te krijgen, hebben we ons tot het Err-object gewend (we hebben hierboven gesproken over de mogelijkheid van een dergelijke situatie).

U kunt dan de inhoud van het bestand lezen, maar dit veronderstelt dat de programmeur enig begrip van de structuur moet hebben (net zoals bij het werken met willekeurige binaire bestanden). In dit geval kan een aanroep van de lread-functie er als volgt uitzien:

Dim MyVar As Single wBytes = lread (hFile &, MyVar, Len (MyVar) 'read real number, 4 bytes' wBytes - aantal daadwerkelijk gelezen gegevens,' -1 - error ... Typ MyStruct x As Single i As Integer End Typ Dim MyVar As MyStruct wBytes = lread (hFile &, MyVar, Len (MyVar)) 'lees datastructuur, 6 bytes

Merk nogmaals op: het tweede functieargument wordt doorgegeven door verwijzing, de rest wordt doorgegeven door waarde.

Dim MyVar As String MyVar = Space $ (10) 'reserveer een variabele voor 10 tekens wBytes = lread (hFile &, ByVal MyVar, Len (MyVar))' lees een tekenreeks, 10 tekens

Hier ziet u een belangrijk verschil met het vorige voorbeeld - de stringvariabele gaat noodzakelijkerwijs vergezeld van het ByVal-sleutelwoord.

Het lezen van de inhoud van een bestand in een array (voor de eenvoud gebruiken we een eendimensionale bytearray) gaat als volgt:

Dim MyArray (1 tot 10) As Byte wBytes = lread (hFile &, MyArray (1), _ Len (MyArray (1)) * 10) 'lees 10 array-elementen

Door het eerste element van de array als argument op te geven, geven we het adres door van het begin van het geheugengebied dat voor de array is gereserveerd. Het is duidelijk dat elk fragment van de array op deze manier kan worden gevuld:

WBytes = lread (hFile &, MyArray (4), _ Len (MyArray (1)) * 5) ‘lees array-elementen 4 tot 8

Tip 5. Gebruik alias voor versnellingen en parameters Zoals elke

Hier zullen we, op basis van het vorige voorbeeld, de essentie van de vierde tip van Dan Appleman onthullen.

Wanneer u met de lread-functie werkt, onthoud dan dat wanneer u deze opent met behulp van een stringvariabele, u het ByVal-sleutelwoord moet gebruiken (anders kan het bericht over een illegale bewerking niet worden vermeden). Voor de zekerheid kunt u een extra speciale beschrijving van dezelfde functie maken om alleen met stringvariabelen te werken:

Declareer functie lreadString Lib "kernel32" _ Alias ​​​​"_lread" (_ ByVal hFile zo lang, ByVal lpBuffer als string, _ ByVal wBytes zo lang) zo lang

Wanneer u met deze beschrijving werkt, hoeft u ByVal niet langer op te geven bij het openen van:

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

Het lijkt erop dat je met de syntaxis van de Declare-instructie een vergelijkbare speciale beschrijving voor een array kunt maken:

Declareer functie lreadString Lib "kernel32" Alias ​​​​"_lread" (_ ByVal hFile zo lang, lpBuffer () als byte, _ ByVal wBytes zo lang) zo lang

Echter, het beroep

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

leidt onvermijdelijk tot een fatale programmafout.

Dit is een voortzetting van het gesprek over de eigenaardigheden van het verwerken van stringvariabelen in Visual Basic: VB gebruikt een dubbelbyte Unicode-codering, Win API - een enkelbyte ANSI (en met het formaat geaccepteerd in C - met een nulbyte aan de einde). Dienovereenkomstig wordt, wanneer stringvariabelen als argument worden gebruikt, de conversie van Unicode naar ANSI altijd automatisch uitgevoerd wanneer een API-functie (meer precies, een DLL-functie) wordt aangeroepen, en de omgekeerde conversie wordt uitgevoerd bij terugkeer.

De conclusie hiervan is eenvoudig: met String-variabelen kun je karaktergegevens uitwisselen, maar je kunt ze niet gebruiken om willekeurige binaire informatie uit te wisselen (zoals het geval was met 16-bits versies van VB). In het laatste geval is het beter om een ​​eendimensionale byte-array te gebruiken.

Zoals u weet, kan het type String worden gebruikt om een ​​aangepaste structuur te beschrijven. In dit verband moet het volgende worden onthouden:

  • Het is absoluut onmogelijk om de volgende constructie te gebruiken om naar de Win API te verwijzen: Type MyStruct x As Single s As String 'variabele lengte string End Type

    In het geval van een string met variabele lengte wordt een stringdescriptor doorgegeven als onderdeel van de structuur met alle gevolgen van dien in de vorm van een uitvoeringsfout van het programma.

  • U kunt een string met vaste lengte als structuurelement gebruiken: Type MyStruct x As Single s As String * 8 'string met vaste lengte End Type

In dit geval wordt de overeenkomstige conversie van coderingen uitgevoerd.

En de laatste opmerking: je kunt in geen geval een array van stringvariabelen (zowel vaste als variabele lengte) gebruiken bij het aanroepen van een API-functie. Anders wordt de schijn van een "illegale operatie" gegarandeerd.

Het is zeer waarschijnlijk dat u een situatie tegenkomt waarin u uw eigen DLL-functies moet schrijven. De noodzaak hiervan zal onvermijdelijk verschijnen als u gemengde programmeertechnologie gebruikt - het gebruik van twee of meer programmeertalen om één applicatie te implementeren.

Merk in dit verband op dat gemengd programmeren vrij gebruikelijk is voor een vrij complexe toepassing. Elke taal (meer precies, een op taal gebaseerd programmeersysteem) heeft zijn eigen sterke en zwakke punten, dus het is vrij logisch om de voordelen van verschillende tools te gebruiken om verschillende problemen op te lossen. Bijvoorbeeld VB - voor het maken van een gebruikersinterface, C - voor efficiënte toegang tot systeembronnen, Fortran - voor het implementeren van numerieke algoritmen.

De mening van de auteur is dat elke serieuze programmering vereist dat de ontwikkelaar ten minste twee tools bezit. Natuurlijk is het in de moderne omstandigheden van een duidelijke taakverdeling erg moeilijk om een ​​uitstekende expert te zijn, zelfs in twee systemen, dus het schema "hoofd- en hulptalen" is logischer. Het idee hier is dat zelfs een oppervlakkige kennis van de "hulptaal" (het schrijven van vrij eenvoudige procedures) de effectiviteit van de "hoofdtaal" aanzienlijk kan vergroten. Merk op dat kennis van VB, althans als een aanvullende, tegenwoordig een bijna verplichte vereiste is voor een professionele programmeur. Trouwens, in de dagen van DOS voor elke programmeur, inclusief Basic, was het zeer wenselijk om de basis van Assembler te kennen.

Op de een of andere manier, maar zelfs in de omstandigheden van groepswerk, wanneer elke programmeur zich bezighoudt met zijn eigen specifieke bedrijf, moeten alle projectdeelnemers een idee hebben van de kenmerken van de procedurele interface in verschillende talen. En om te weten dat veel programmeersystemen (inclusief VB), naast de standaardinterface, u toestaan ​​om andere, uitgebreide methoden te gebruiken om naar procedures te verwijzen, die het mogelijk maken om de interface aan te passen aan een andere taal.

Let bij het bestuderen van de interprocedurele interface op de volgende mogelijke valkuilen:

  • Verschillende talen kunnen verschillende conventies gebruiken voor het schrijven van identifiers. Er wordt bijvoorbeeld vaak een onderstrepingsteken gebruikt aan het begin van een procedurenaam, wat verboden is in VB. Dit probleem is eenvoudig op te lossen door het Alias-trefwoord in het Declare-statement te gebruiken (zie voorbeeld tip 2.3).
  • Een andere volgorde van het schrijven van de doorgegeven argumenten op de stapel kan worden gebruikt. In de dagen van DOS (ik weet eerlijk gezegd niet hoe het er nu uitziet in Windows), schreef C bijvoorbeeld de argumenten vanaf het einde van de lijst, andere talen (Fortran, Pascal, Basic) - vanaf het begin.
  • Standaard worden verschillende principes voor het doorgeven van parameters gebruikt - op basis van referentie of op waarde.
  • Verschillende principes voor het opslaan van stringvariabelen. In C (evenals in Fortran en Pascal) wordt de lengte van een string bijvoorbeeld gedefinieerd door een nulbyte aan het einde, terwijl in Basic de lengte expliciet wordt geschreven in de stringdescriptor. Natuurlijk moet u rekening houden met de mogelijkheid om verschillende tekencoderingen te gebruiken.
  • Houd er bij het overzetten van multidimensionale arrays rekening mee dat er verschillende opties zijn om multidimensionale structuren om te zetten in eendimensionaal (beginnend bij de eerste index of bij de laatste, in relatie tot tweedimensionale arrays - "per rijen" of "per kolommen").

Rekening houdend met dit alles kunnen de volgende aanbevelingen worden geformuleerd:

  • Gebruik de eenvoudigste, bewezen manieren om argumenten door te geven aan DLL-functies. De standaarden die zijn aangenomen voor de Win API zijn goede voorbeelden.
  • Geef in geen geval arrays van stringvariabelen door.
  • Gebruik heel voorzichtig het doorgeven van eenvoudige tekenreeksvariabelen en multidimensionale arrays.
  • Zorg ervoor dat u speciaal de functionaliteit controleert van het mechanisme voor het doorgeven van argumenten van en naar de aangeroepen procedure. Schrijf een aangepaste test om de gegevensoverdracht te testen. Controleer afzonderlijk of elk argument correct is doorgegeven. Als je bijvoorbeeld een procedure hebt met meerdere argumenten, controleer dan eerst of elke parameter correct is doorgegeven voor een variant met één argument, en pas daarna voor de hele lijst.

Maar wat als de DLL-functie al is geschreven, bijvoorbeeld in Fortran, maar de invoerinterface niet goed aansluit bij de bovenstaande VB-standaarden? Er zijn hier twee tips te geven. Schrijf eerst een test-DLL-functie en probeer met vallen en opstaan ​​de juiste aanroep van het VB-programma te vinden. Ten tweede: schrijf een adapterprocedure in dezelfde Fortran die een eenvoudige interface zou bieden tussen VB en een DLL-functie met het converteren van eenvoudige datastructuren naar complexe (bijvoorbeeld het converteren van een multidimensionale bytearray naar een stringarray).

Dus: gebruik DLL-functies. Maar blijf alert...

ComputerPers 9 "2000

Deze korte termijn is bekend bij iedereen die op de een of andere manier de ontwikkeling is tegengekomen. Maar niet iedereen begrijpt wat het precies betekent en waarom het nodig is. Ontwikkelaar Peter Gazarov sprak in eenvoudige bewoordingen over de API in zijn blog.

API staat voor Application Programming Interface. De meeste grote bedrijven ontwikkelen op een bepaald moment API's voor klanten of voor intern gebruik. Om te begrijpen hoe en hoe API's worden gebruikt in ontwikkeling en zaken, moet u eerst begrijpen hoe het "world wide web" werkt.

World Wide Web en externe servers

Het WWW kan worden gezien als een enorm netwerk van onderling verbonden servers die elke pagina opslaan. Een gewone laptop kan worden omgezet in een server die een hele site op het netwerk kan bedienen, en ontwikkelaars gebruiken lokale servers om sites te maken voordat ze voor een breed scala aan gebruikers worden geopend.

Wanneer ingevoerd in de adresbalk van de browser www.facebook.com een overeenkomstig verzoek wordt verzonden naar de externe Facebook-server. Zodra de browser een reactie ontvangt, interpreteert deze de code en toont de pagina.

Elke keer dat een gebruiker een pagina op het netwerk bezoekt, communiceert hij met de API van de externe server. De API is het deel van de server dat verzoeken ontvangt en antwoorden verzendt.

API als een manier om klanten te bedienen

Veel bedrijven bieden API's aan als kant-en-klare producten. Weather Underground verkoopt bijvoorbeeld toegang tot zijn API voor het verkrijgen van weergegevens.

Gebruiksscenario: op de website van een klein bedrijf staat een formulier om klanten aan te melden voor een afspraak. Het bedrijf wil Google Agenda erin insluiten om klanten de mogelijkheid te geven om automatisch een evenement aan te maken en de details van een aanstaande vergadering in te vullen.

API-toepassing: doel - de siteserver moet rechtstreeks contact opnemen met de Google-server met een verzoek om een ​​evenement met de opgegeven details te maken, een Google-antwoord te ontvangen, te verwerken en de relevante informatie naar de browser te verzenden, bijvoorbeeld een bericht waarin om bevestiging wordt gevraagd aan de gebruiker.

Als alternatief kan de browser een verzoek indienen bij de Google-server-API, waarbij de server van het bedrijf wordt omzeild.

Waarin verschilt de Google Agenda-API van andere externe server-API's op het netwerk?

Technisch gezien zit het verschil in het verzoek- en antwoordformaat. Om een ​​complete webpagina te genereren, verwacht de browser een reactie in HTML, terwijl de Google Calendar API gewoon data terugstuurt in een formaat als JSON.

Als het API-verzoek wordt gedaan door de server van de website van het bedrijf, dan is het de client (net zoals de client de browser is wanneer de gebruiker de website opent).

Dankzij de API krijgt de gebruiker de mogelijkheid om een ​​actie uit te voeren zonder de website van het bedrijf te verlaten.

De meeste moderne sites gebruiken op zijn minst een paar API's van derden. Veel taken hebben al kant-en-klare oplossingen die worden aangeboden door externe ontwikkelaars, of het nu een bibliotheek of een service is. Vaak is het makkelijker en betrouwbaarder om een ​​kant-en-klare oplossing te zoeken.

Veel ontwikkelaars distribueren een applicatie naar meerdere servers die met elkaar communiceren via een API. De servers die als hulpfunctie voor de hoofdtoepassingsserver dienen, worden microservices genoemd.

Dus wanneer een bedrijf een API aan zijn gebruikers aanbiedt, betekent dit simpelweg dat het een set aangepaste URL's heeft gemaakt die alleen gegevens retourneren als reactie.

Dergelijke verzoeken kunnen vaak via een browser worden verzonden. Aangezien gegevensoverdracht via het HTTP-protocol in tekstvorm plaatsvindt, kan de browser het antwoord altijd weergeven. Via een browser hebt u bijvoorbeeld rechtstreeks toegang tot de GitHub-API (https://api.github.com/users/petrgazarov) en zonder toegangstoken, en krijgt u het volgende antwoord in JSON-indeling:

De browser geeft het JSON-antwoord perfect weer, dat eenvoudig in de code kan worden ingevoegd. Het is voldoende om eenvoudig gegevens uit dergelijke tekst te extraheren om deze naar eigen inzicht te gebruiken.

Nog enkele API-voorbeelden

Het woord "toepassing" kan op veel verschillende manieren worden gebruikt. In de context van de API betekent dit:

  • een stukje software met een specifieke functie,
  • de server als geheel, de hele applicatie of alleen een apart deel van de applicatie.

Elk stukje software dat duidelijk van de omgeving kan worden onderscheiden, kan de letter "A" in de Engelse afkorting vervangen, en het kan ook een soort API hebben. Wanneer een ontwikkelaar bijvoorbeeld een bibliotheek van een derde partij in code injecteert, wordt deze onderdeel van de gehele applicatie. Als een op zichzelf staand stuk software zal de bibliotheek een API hebben waarmee deze kan communiceren met de rest van de applicatiecode.

Bij objectgeoriënteerd ontwerpen wordt code weergegeven als een verzameling objecten. In een toepassing kunnen honderden van dergelijke objecten met elkaar in wisselwerking staan. Elk van hen heeft zijn eigen API - een set openbaar eigenschappen en methoden voor interactie met andere objecten in de toepassing. Objecten kunnen ook hebben: privaat, interne logica die voor de omgeving verborgen is en geen API is.