Тема: DLL в VC++
Показать сообщение отдельно
Старый 08.07.2003, 18:22   #5   
Registered User
 
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 45

Fisher вне форума Не в сети
Цитата:
[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]
Спецификация линковки используется с функциональными типами, именами функций и именами переменных.
  Ответить с цитированием