Страница 1 из 1

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

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

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

Поможите, плз.

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

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

Еще может быть тонкость в том, что линкер пытается найти не совсем то имя, что есть в другой DLL. С++ любит добавлять "дополнительные системные" символы к именам функций (в которых "зашифрованы" типы и количество параметров функции). Может быть "непонимание" происходит где-то в этой области.

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

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

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

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