export DLL
От: Torero2002 Россия  
Дата: 03.10.03 12:29
Оценка:
У меня такая проблема: я экспортирую статическую функцию класса:
static DWORD WINAPI Test;

Пишу в ee DEF файле. Но снаружи она недоступна. Вывдеется ошибка unresolved symbol. Как это побороть?

04.10.03 12:00: Перенесено модератором из 'C/C++' — ПК
Smart? Prove it!
Re: export DLL
От: TepMuHyc  
Дата: 03.10.03 14:52
Оценка:
Здравствуйте, Torero2002, Вы писали:

T>У меня такая проблема: я экспортирую статическую функцию класса:

T>static DWORD WINAPI Test;
Это есть определение глобальной статической переменной, а не функции.
Такая переменная за пределами compilation unit не видна. И уж тем более, не может экспортироваться.

T>Пишу в ee DEF файле.

Ух ты! Пример описания в студию.

А на будущее, несколько советов:
— не экспортируй функций класса — неважно каких — статических или нет.
— экспортируй только глобальные функции.
— всегда определяй формат вызова __stdcall, __cdecl или WINAPI (что эквивалентно __stdcall).
Избегай пользоваться __fastcall — он по-разному обрабатывается разными клмпиляторами.
— определяй эти функции как extern "С"
— не пользуйся .DEF файлом — __declspec(dllexport) лучше и поддерживается как MSVC, ICC, GCC
и (может быть) борландовким убоищем.
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re: export DLL
От: A.V.B.  
Дата: 04.10.03 06:05
Оценка:
Здравствуйте, Torero2002, Вы писали:

T>У меня такая проблема: я экспортирую статическую функцию класса:

T>static DWORD WINAPI Test;

T>Пишу в ee DEF файле. Но снаружи она недоступна. Вывдеется ошибка unresolved symbol. Как это побороть?


Дя экспорта функции void foo(void) нужно описать ее в секции декларации как

extern "C" void foo(void);
Вообще советую посмотреть документацию на создание def файлов и на формат extern директивы.

А в def файле
EXPORT
foo

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

а вот __declspec(dllexport) врятли будет понят Borland компилятором.

Тип вызова (_cdecl, _stdcall) определять, в принципе обязательно, если он не указан явно, он возьмется из настроек опций проекта. Вообще лучше использовать классические типы вызова (_cdecl, _stdcall). Кто знает
откуда вам придется звать эту функцию
Re[2]: export DLL
От: Игорь Вартанов Ниоткуда  
Дата: 07.10.03 06:41
Оценка:
Здравствуйте, TepMuHyc, Вы писали:

TMH>- не пользуйся .DEF файлом — __declspec(dllexport) лучше




Очень странный совет. И критерий сравнения ("лучше") не менее странный.
---
С уважением,
Игорь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.