Цитата:
|
[i]Вообще-то, недекорированные имена делает именно extern "C".
|
extern "C" указывает на то, что объект/функция имеют C-линковку, т.к. в С++ по умолчанию используется С++-линковка (см. Стандарт 7.5).
Цитата:
|
А __cdecl это всего лишь соглашение о обратном помещении параметров в стек и то, что вызывающая процедура очищает стек.
|
Совершенно верно. Более того, если посмотреть MSDN, можно прочесть:
"The form of decoration for a C function depends on the calling convention used in its declaration, as shown below.
Calling Convention Decoration
__cdecl (the default) Leading underscore (_)
__stdcall Leading underscore (_) and a trailing at sign (@) followed by a number representing the number of bytes in the parameter list
__fastcall Same as __stdcall, but prepended by an at sign instead of an underscore "
Цитата:
|
А декорированное имя или нет для эскпорта/импорта DLL не имеет никакого значения.
|
Смотря как использовать функцию. Если через import library, то линковщик сам установит связь (если конечно он знаком с форматом декорирования), но если использовать GetProcAddress, то нужно указывать название функции, которое она получила у компилятора, а не у программиста.
Цитата:
|
PS. А как же по твоему сделать эспорт целого класса из DLL?
|
Все зависит от средства разработки. В MSVC достаточно указать атрибут __declspec(dllexport).
Цитата:
Неужели на extern "C"? [/B]
|
Спецификация линковки используется с функциональными типами, именами функций и именами переменных.