[ 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, baci pogled ovde:

http://www.codeproject.com/cpp...ng_conventions_demystified.asp

[ 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.