Sziasztok!
Ennyi a lényeg. Írtam egy dll-t (BorlandC 2006-ban, muszáj hogy az legeyn mert a többi c-ben nincs Tbitmap) + keletkezett hozzá egy lib is (törvényszerüen). Na szóval az a hejzet hogy a delphi-ben írt exe-kelle hogy használja ezt a dll-t. Próbáltam berakni statikusan (függvényt fordításkor belikeli az adott dll-ből.) . Dimamikusan (LoadLibrary), de egyáltalán nem működik. Azza a hibával elszáll, hogy 2 processz ugyanarra a memóriaterületre akar írni. Tud valaki egy mintapéldával segíteni?
Megoldás:
Függvényhívási konvenció volt a probléma. Mind a 2 helyen _stdcall-t kellett használni és működik. Köszönöm.
- 1261 megtekintés
Hozzászólások
Ezen az oldalon foglalkoznak ilyesmi kerdessel:
http://www.drbob42.com/delphi/headconv.htm
Egyebkent google is kidob par talalatot "borland delphi c dll" kulcsszavakra, amiket nem neztem mennyire relevansak.
--
ahan nem
- A hozzászóláshoz be kell jelentkezni
Hú én rengeteget találtam és végig is nézem. Köszi az oldalt ezt is átnézem.
- A hozzászóláshoz be kell jelentkezni
Aha ezekt már próbáltam pont így. Az eredmény ugyanaz.
- A hozzászóláshoz be kell jelentkezni
Itt is van egy csomo mindent, egyik megoldast sem neztem meg amit javasolnak: http://www.faqts.com/knowledge_base/view.phtml/aid/23661/fid/175
Delphihez egyebkent nem ertek, de amikor MSVC dll-t akartunk BorlandC++ alkalmazashoz linkelni, akkor hivasi konvenciokkal voltak gondok, meg name manglinggal (bar ez c eseten kevesebb gondot szokott jelenteni). Hivasi konvenciokat erdemes ellenorizni, fuggvenyhivaskor lehet a dll es a hivo alkalmazas is piszkalja a stacket azert fagy ki.
Mindenesetre sok sikert hozza :)
--
ahan nem
- A hozzászóláshoz be kell jelentkezni
Na valameddig eljutottam. Írtam egy megafüggváényt c-ben.
extern "C" __declspec(dllexport) WINAPI int teszt (int x)
{
return x;
}
Ekkor a cucc simán elszáll. Az említett hibával. Misterint 2 processz ugyanazt a memóriaterükletet írkálja, és kapok egy hexa címet.
extern "C" __declspec(dllexport) int teszt (int x)
{
return x;
}
na itt a delphis függvénytesztelőm akármit csinálok
teszt (1....1000000 bármit beírhatok); visszatérési értékként fix 124398-at kapok. A C-s-dll jól dolgozik, mert ha ezt a számot kivonom x-ből konzekvenen mindíg 0-t kapok. Tehát a delphi ad át marhaságot. A dll -be beírtam egy sima printf függvényt az is az említett számot írja ki.
kezdem feladni. Szerintem reménytelen. Egyszerűen nem kopmatibilisek. És akkor még ott van e keménymag, hogy vagy egy komplett képet adokát a szernzoranalizátornak vagy egy 640*480-as pointertömböt.
- A hozzászóláshoz be kell jelentkezni
A betöltéskor vagy csak eljáráshíváskor száll el?
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Utóbbi. Eljáráshíváskor.
- A hozzászóláshoz be kell jelentkezni
Mert a pascal stdcall módban hívja a függvényeket, a C fv-ket meg cdecl módban kell. Hogy ezt hol tudod prefixelni, már mittomén.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Azt hiszem inkabb fastcall-t hasznal a delphi, de vegulis mindegy. Szerintem is ott lesz a gond. Itt van leirva, melyik mit csinal: http://en.wikipedia.org/wiki/X86_calling_conventions
--
ahan nem
- A hozzászóláshoz be kell jelentkezni
Na ez ígéretesnek tűnik. Meglesem. Holnap munkahelyem ma már nem akarok több delphi kódot látni.
- A hozzászóláshoz be kell jelentkezni
+1
Elvileg a funkciót így definiálod valahogy így:
int FASTCALL ...
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni
Igen ez volt a gond Köszönöm szépen. Mind a delphiben mind a c-ben stdcall metódust használva kitűnően működik a dolog.
Mégegyszer köszönöm.
- A hozzászóláshoz be kell jelentkezni