Ringe konvensjoner og DLL-filer?

Hvordan kan jeg kalle en metode i en DLL skrevet i enten C eller C ++? Betydningen av å kalle konvensjoner
I Delphi, når vi erklære en prosedyre eller funksjon, vi kan spesifisere en konvensjon hjelp en av de direktiver registrere, pascal, cdecl, STDCALL, og safecall.All disse konvensjonene bestemme i hvilken rekkefølge parametere sendes til prosedyren /function.Let meg kort forklare hva disse konvensjonene mean.All de ringer konvensjoner gjøre bruk av stabelen til sende parametre og tilbake bortsett Registeret konvensjonen Registrer /Pascal.
Disse konvensjonene sende parametre (prosedyre /funksjon) fra venstre mot høyre. Lengst til venstre parameter blir evaluert og bestått første og den lengst til høyre parameter blir evaluert og vedtatt last.And på "Registrer" ringer konvensjonen gjør bruk av CPU-registre og dermed er det raskere enn andre konvensjoner. Når du bruker denne konvensjonen, vil det ikke være noen stack opprettelse under kjøring hvis parametrene er mindre enn eller lik tre. Hvis parameterne er mer enn tre, så de resterende parametrene vil bruke stack.This "Registrer" convention er standard i Delphi og det er den effektive av alt fordi den ikke skaper /bruker stabelen på runtime.The "Pascal" convention brukes for bakover compatibility.The stabelen opprydding prosessen vil bli gjort automatisk for alle konvensjoner når samtalen går tilbake, bortsett fra "cdecl" cdecl /STDCALL /safecall:.
Disse konvensjonene sende parametre fra høyre til venstre. Lengst til høyre parameter blir evaluert og passert første og den lengst til venstre parameteren blir evaluert og passert siste. Med denne konvensjonen, har den som ringer for å fjerne parametrene fra bunken når samtalen avkastning. Så det er ansvaret til den som ringer. Hvorfor jeg skriver disse enkle tingene i detalj?
Ja. Dette vil være svært nyttig når du skriver DLL enten i Delphi og få tilgang til den i Delphi eller tilgang til en DLL skrevet i andre languages.When du skrive en funksjon /prosedyre i en DLL i Delphi, vil du være å spesifisere ringer konvensjonen for hver. Også når du kaller disse funksjonene /prosedyrer fra et program gjennom enten statisk belastning eller dynamisk belastning, må du spesifisere hvilken type ringer convention.When du kaller en DLL skrevet i enten C eller C ++, må du bruke "cdecl" konvensjon. Ellers youwill ende opp i "tilgangsbrudd" problemer og noen ganger programmet kan krasje. Også DLL, du ringer, bør være på søke path.I overfor et problem i mitt prosjekt nettopp på grunn av dette kallet konvensjonen. I søknaden min, jeg trenger å kalle en metode i en C DLL. Jeg kopierte DLL inn min maskin. Deretter erklærte jeg alle metodene i DLL i Delphi og prøvde å ringe en av dem. Når jeg prøver å få tilgang til en metode, fikk jeg "Access brudd"; noen ganger programmet hang og noen ganger hele programmet krasjet. Endelig har jeg så inn i Delphi hjelp og fikk løsningen med kall konvensjonen. Så erklærte jeg hver metode i DLL i Delphi med "cdecl" direktiv. Det fungerte fint. Så ikke glem å legge til dette direktivet i hver metode samtale fra en DLL skrevet i C /C ++. Noen ganger tilbake jeg har sett en person å spørre dette problemet i forumet som hvordan å kalle en metode i en DLL skrevet i C /C ++ . Dette er solution.Enjoy !!! Thanks.Magesh.