/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Mere om kald af funktioner i C dll-er
Fra : Netrom


Dato : 27-02-01 23:02

Er der nogen, der har erfaringer med, hvilken "calling convention" der skal
anvendes ved kald (fra D4) af procedurer og funktioner , som ligger i en dll
kodet i C eller C++ ?

I Delphi manualen står der:

"The default calling convention is register".

Men samtidig står der : "The cdecl convention is useful when you call
functions from DLLs written in C or C++"

De er vidt forskellige.

Man kan vel ikke blot vælge frit ?





 
 
Niels (niLLer) (28-02-2001)
Kommentar
Fra : Niels (niLLer)


Dato : 28-02-01 20:10

Just as I expected, Netrom came up with this:

>I Delphi manualen står der:
>
>"The default calling convention is register".

Det er hvis du ikke skriver noget, altså hvis du bare skriver:

procedure MinProcedure;

Så forudsætter Delphi at du mener "register" konventionen.

>Men samtidig står der : "The cdecl convention is useful when you call
>functions from DLLs written in C or C++"

Det er fordi C som standard bruger en anden konvention end Delphi gør.
Altså skal du bruger cdecl eller stdcall hvis du vil kalde funktioner
skrevet i C.

>Man kan vel ikke blot vælge frit ?

Du kan da sagtens skrive "cdecl;" bag på alle dine procedure og
funktions deklarationer og bruge den i stedet, men så længe det er
funktioner du selv har skrevet og de kun bliver kaldt af dit eget
program så kan du lige så godt udelade konventionen. Men så snart du
enten selv lavet en DLL som et C program skal kalde, eller du skal kalde
en funktion skrevet i C, så skal du bruger cdecl eller stdcall.

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://www.niller.f2s.com/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)

Uffe Kousgaard (01-03-2001)
Kommentar
Fra : Uffe Kousgaard


Dato : 01-03-01 10:02

> Det er fordi C som standard bruger en anden konvention end Delphi gør.
> Altså skal du bruger cdecl eller stdcall hvis du vil kalde funktioner
> skrevet i C.
>
Jeg bruger altid stdcall og det har endnu ikke givet problemer, når mine
DLL'er bliver kaldt fra ret forskellige udviklingsmiljøer - typisk steder,
hvor man ikke kan angive den anvendte konvention.

Hilsen
Uffe




Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste