cdecl w C i C++ + DLL

0

I wlasnie tutaj mam pewna niescislosc otoz preprocesor:

[code]
#ifdef __cplusplus
extern "c" {
#endif
....
#ifdef __cplusplus
}
#endif
[/code]

To ma za zadanie powstrzymac C++ od dodawania dodatkowych krzaczkow do nazw funkcji
(dzieki czemu kod z dll moze byc uzyty w C i C++ - to ma zwiazek z lib-em i headerem do dll)
tylko za cholere nie znalazlem info jakie to sa dodatki - zwazywszy ze zarowno
C jak i C++ defaultowo uzywaja cdecl a jego krzaczki znam i jak to robi.
WIec wynika z tego ze jednak C++ korzysta niby z cdecl ale go dodatkowo rozszerza ?!
Czy nie chodzi tu o ten system z "?" na poczatku - jakis opis bylby mile widziany !?

Kolejna sprawa - fragment MSDNa :

After building this DLL, if you run DUMPBIN /EXPORTS utility on this DLL, you will see the following functions exported.

CMyFunc
CdeclFunc
MYFUNC
_MyFunc@12

ale przeciez do cholery w tablicy exportow kazdej dll MA NIE BYC ZADNYCH dodatkow,
to maja byc czyste nazwy funkcji by kazdy standard wywolania(a tym samym kompilator)
z nich skorzystal - to rowniez znalazlem w MSDNie !! Wiec do ... po malu sie gubie
jak sie okazuje nie wszytkie biblioteki maja czyste nazwy exportowanych funkcji ?!

0

Chodzi o to, że w c np. nie było parametrów domyslnych i overloadingu (overridingu ? - mniejsza o nazwę). C++ buduje nazwy z nazwy głównej funkcji i typów parametrów, czego nie robiło c. A w tym kodzie dołącza się funckje z obj-ta (powiedzmy, że z obj-ta) stworzonego według 'starszej' reguły.

// Snaj to tylko jedna odpowiedź - te dyrektywy są po tylko to, żeby móc dołaczyć bibliotekę skompilowaną jako czyste c, nic więcej. (w plikach nagłówkowych borlanda wiecej jest takich dyrektyw niż samych nagłówków :-D )

0

Ehhh ok ale mimo wszystko prosilbym (tak jak prosilem) o art o dokladnej konwencji budowania nazw funkcji w C++.

Natomiast co do tego co potem napisales to nie bardzo wiem o co ci chodzilo :-/ w tym wypisaniu exportow nie ma standardowego przyklady cdecl ze starego C - bo to by bylo _nazwafunkcji; a _nazwa@12 to juz stdcall - wiec tak jak mowie nie wiem o co ci chodzilo :-/

1 użytkowników online, w tym zalogowanych: 0, gości: 1