Проблема при компиляции проекта DLL

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
RusArt2
Сообщения: 1
Зарегистрирован: 01 фев 2006, 10:07

Я не сильный знаток в С, но у меня возникла необходимость создать библиотеку именно на этом языке, т.к. у меня есть необходимые мне функции, поставляемые производителем прибора, написанные на С.

Там есть примеры. Я из них сделал обычный Win32 Console Application и все работает.
Но когда я делаю проект DLL, линкер выдает сообщение, что не найдены функции. (примерно следующее: "unresolved external __MyFunc()").
Модуль с этой функцией ТОЧНО в проекте и пути к нему верные.
Я делал DLL на Borland C++ Builder, MS Visual C++ 6, MS Visual C++ 7 результат ОБСАЛЮТНО одинаковый.

Поможите, плз.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

А если не "примерно", а точнее? Какие именно функции "unresolved external"? Возможно, тебе нужно подключить к проекту какую-нибудь системную библиотеку?
Думаю, если ты укажешь, какие именно функции не находит линкер, это может прояснить ситуацию.

И еще момент. Линкер не находит функции, когда ты делаешь свою DLL или когда ты ее уже сделал и пытаешься из другой программы (из другой DLL) воспользоваться ее функциями?

Еще может быть тонкость в том, что линкер пытается найти не совсем то имя, что есть в другой DLL. С++ любит добавлять "дополнительные системные" символы к именам функций (в которых "зашифрованы" типы и количество параметров функции). Может быть "непонимание" происходит где-то в этой области.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В коде DLL нужно использовать модификатор extern "C" для имени экспортируемой функции, чтобы оно не искажалось при компиляции на С++.

Код: Выделить всё

extern "C" int MyFunc()
{
 return 0;
}
Кроме этого Visual C++ для проекта DLL использует ещё один файл с расширением .DEF, в котором специальным образом прописываются имена экспортируемых функций.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Но когда я делаю проект DLL, линкер выдает сообщение, что не найдены функции. (примерно следующее: "unresolved external __MyFunc()").
Текст сообщения в студию
Ответить