Re[2]: Еще вопросик
От: _Rom_  
Дата: 25.01.03 00:02
Оценка:
Здравствуйте, dazy, Вы писали:

D>С объектными файлами вопрос решился так:

D>я добавила и dummy.h и dummy.obj в проект и все нормально собралось.

D>Еще маааленький вопросик есть:

D>я хочу сделать DLLку, делаю проект Win32 DLL

D>пишу:


D>_____файл dll1.h_______

D>int f1(int);

D>_____файл dll1.dll_____

D>#include "dll1.h"
D>int f1(int x) { return 2*x; }

D>____файл dll1.def______

D>LIBRARY DLL1
D>EXPORTS
D> f1

D>Делаю Build All и получаю сообщение

D>"Unresolved external f1 referenced in root"
D>В чем тут дело?

Дело в том, что C++ компилятор искажает название твоей функции, если только не указать перед ней модификатор:
[ccode]
// dll.h
extern "C" int f1(int x);
//dll.cpp
int f1(int x); { return 2*x; }
[\ccode]
По мне, так лучше не заморачиваться с def-файлом, а сделать так:
[ccode]
//dll.h
#ifndef MYDLLAPI
#define MYDLLAPI extern "C" __declspec(dllimport)
#endif
MYDLLAPI int f1(int x);

//dll.cpp
#define MYDLLAPI extern "C" __declspec(dllexport)
#include "dll.h"
int f1(int x); { return 2*x; }
[\ccode]
При компиляции файла "dll.cpp" твоей dll сначала определяется макрос MYDLLAPI, котроый говорит компилеру, что любая функция/переменная с этим модификатором является экспортируемой из dll.
В проекте, где твоя dll используется, включаешь dll.h, MYDLLAPI в этом случае определяется как extern "C" __declspec(dllimport), из чего компилятор делает вывод, что все функции/переменные с этим модификатором являются импортируемыми и поищет информацию о них в файле dll.lib, который, кстати, нужно добавить в опции линкера.
Пробуй.
Роман.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.