Re[2]: Plugin к winamp'у
От: LeonCrew Беларусь  
Дата: 08.01.07 19:38
Оценка:
Здравствуйте, Evgi1980, Вы писали:

E>Если сменить расширение .cpp файлов второго проекта на .с и собрать dll, то winamp начинает ее видеть.

E>Почему?

Проект не смотрел, но скорее всего это поведение компилятора в названиях функций.

Дело в том, что в стандарте С внешяя функция не меняет своего названия (как она была задана в С, так и будет отображена в DLL, если явно не указать инное). Внутренняя функция в С имеет такоеже название, но впереди стоит символ подчеркивания.

В С++ немного инной подход. По умолчанию компилятор "уродует" название функции "дописывая" название спецсимволами означающее размер аргументов, вид вызова и т.д.

Из чего следует, что в С проекте явно не указано как транслировать название функции в DLL и при смене расширения на cpp имя "уродуется". Чтобы этого избежать, следует определить функцию так:

extern "C" тип_возврата название_функции(аргументы);

В MSVC рекомендованно:

extern "C" тип_возврата __declspec(dllexport) __stdcall название_функции(аргументы);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.