[ stargazer @ 26.06.2006. 20:18 ] @
| Koristim MSVC++ .NET 2003 i kada napravim DLL projekat, i deklarišem funkcije za izvoz iz njega, dolazi mi do toga da kompajlirani DLL sadrži ona "dekorisana" imena izveženih funkcija.
Deklaracija funkcija izgleda ovako :
Code:
#define TESTPG_API __declspec(dllexport)
#ifdef __cplusplus
extern "C" {
#endif
TESTPG_API int __stdcall MyDestroy();
TESTPG_API int __stdcall MyUnInitialize();
#ifdef __cplusplus
}
#endif
A DLL sadrži sledeća imena ( uzeto iz Dependency Walker-a ) :
_MyDestroy@0
_MyUnInitialize@0
Ono što mene zanima je da li kojim slučajem postoji neka opcija da se podesi u projektu DLLa pa da se isključi ovo ukrašavanje imena izveženih funkcija?
Hvala |
[ Dragi Tata @ 26.06.2006. 20:42 ] @
Možeš da mu navedeš alias ako koristiš def fajl, ako me pamćenje dobro vara.
[ yooyo @ 26.06.2006. 21:37 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:41 GMT+1]
[ stargazer @ 26.06.2006. 22:54 ] @
Yoyo, zar to nisam već uradio?
Ovakav projekat sam već radio na isti način ( bez DEF fajla ) i sve je radilo kako treba. Zato baš i pitam da nije do nekog podešavanja ili šta ja znam zašto neće da me sluša.
[ yooyo @ 27.06.2006. 09:08 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:40 GMT+1]
[ stargazer @ 27.06.2006. 12:06 ] @
Citat:
Nisi.... imas __stdcall viska. Izbaci ga i onda bi trebalo da sve bude OK.
Ali, zar MSVC++ kompajler ne kompajlira __cdecl Calling Convention ako se ne zada drugačije?
[ yooyo @ 27.06.2006. 13:21 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:40 GMT+1]
[ stargazer @ 27.06.2006. 13:55 ] @
Izvini za yoyo... ;)
Prvi put čujem da extern "C" znači __cdecl?! To označava linkage, a ne calling convention. Svejedno, nemam nameru još i o tome da raspravljam, jer mi je sve u zastoju zbog glupave C++ dekoracije.
Činjenica je da u opcijama projekta ima da se podesi Calling Convention, ali to bi onda uticalo na sve funkcije u projektu. Možda ja to ne želim.
Probaću preko DEF fajla. Hvala u svakom slučaju...
PS:
Evo, čisto iz znatiželje sam probao da kompajliram bez __stdcall, i sada su imena u redu ?! Ne znam šta da kažem...
[Ovu poruku je menjao stargazer dana 27.06.2006. u 15:05 GMT+1]
[ Dragi Tata @ 27.06.2006. 14:11 ] @
[ yooyo @ 27.06.2006. 20:04 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:40 GMT+1]
[ stargazer @ 27.06.2006. 20:39 ] @
Citat:
Npr.. da sam juce umro ovo ne bih znao :)
Ništa mi novo nisi rekao. To je bilo kompajlirano sa __cdecl konvencijom u opcijama, a bez naznačenog __stdcall u prototipima funkcija; a čak i kada se u opcijama projekta podesi __stdcall, on radi tu dekoraciju. Sve u svemu DEF fajl je odradio posao i hvala tati.
PS: Nadam se samo da si pogledao link koji ti je tata preporučio ;)
[ yooyo @ 28.06.2006. 10:46 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:40 GMT+1]
[ stargazer @ 28.06.2006. 11:55 ] @
Pretpostavljam da si ti to već odradio. Reci kakvo je čudo u pitanju i šta treba da se objasni.
[ yooyo @ 28.06.2006. 16:29 ] @
[Ovu poruku je menjao yooyo dana 29.06.2006. u 14:39 GMT+1]
[ stargazer @ 28.06.2006. 22:51 ] @
Citat:
Funkcije su izvezene na isti nacin ali su prevedene kao C++ i kao C code. Export je drugaciji, tj. c funkcija nije dekorisana a cpp funkcija je dekorisana.
I šta je tu čudno?
Ja pretpostavljam da kada kažeš cpp funkcija, misliš na onu koja se izvozi iz pera.cpp.
Naziv ove teme je :
C++ Dekoracija imena izvežene funkcije
Izvozio sam funkciju iz cpp fajla, i bila je dekorisana.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.