Подскажите пожалуйста как решить следующую задачу:
Необходимо создать чистый проект ("Win32Application: Application type = DLL", воспользовавшись стандартным wizard'ом) на VStudio (2003) и проэкспортировать функцию по имени (таким образом, чтобы ее можно было затем вызвать из другого приложения, которое загрузит эту DLL).
Проблема состоит в том, что функция экспортируется но не под тем именем которое ей даю я (т.е. если есть функция "func1" то в DLL вместо "func1" записывается что-то вроде "?func1@@XYZ")
Спасибо
27.10.04 01:53: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, _dg, Вы писали:
_dg>Подскажите пожалуйста как решить следующую задачу:
_dg>Необходимо создать чистый проект ("Win32Application: Application type = DLL", воспользовавшись стандартным wizard'ом) на VStudio (2003) и проэкспортировать функцию по имени (таким образом, чтобы ее можно было затем вызвать из другого приложения, которое загрузит эту DLL).
_dg>Проблема состоит в том, что функция экспортируется но не под тем именем которое ей даю я (т.е. если есть функция "func1" то в DLL вместо "func1" записывается что-то вроде "?func1@@XYZ")
_dg>Спасибо
Добавь в проект .def файл с содержанием
EXPORTS
func1
или сделай свою функцию extern "С"
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
P>Добавь в проект .def файл с содержанием
P>P>EXPORTS
P> func1
P>
Ммм... а как это сделать? Я его добавляю в список SourceFiles/HeaderFiles/ResourceFiles — эффект нулевой, файл просто игнорируется. Может его нужно как-нибудь в самом тексте подключать?
P>или сделай свою функцию extern "С"
В таком случае функция экспортируется с именем "_func1@0". Это конечно уже лучше, но все-таки не то
P>>или сделай свою функцию extern "С"
_dg>В таком случае функция экспортируется с именем "_func1@0". Это конечно уже лучше, но все-таки не то
Забыл уточнить — функцию необходимо скомпилировать по модели stdcall, от сюда и неработоспособность extern "C"
Здравствуйте, _dg, Вы писали:
P>>Добавь в проект .def файл с содержанием
P>>P>>EXPORTS
P>> func1
P>>
_dg>Ммм... а как это сделать? Я его добавляю в список SourceFiles/HeaderFiles/ResourceFiles — эффект нулевой, файл просто игнорируется. Может его нужно как-нибудь в самом тексте подключать?
Указать в настройках проекта Module Definition File: bla-bla.def
... << RSDN@Home 1.1.4 beta 2 >>
Здравствуйте, _dg, Вы писали:
_dg>Проблема состоит в том, что функция экспортируется но не под тем именем которое ей даю я (т.е. если есть функция "func1" то в DLL вместо "func1" записывается что-то вроде "?func1@@XYZ")
Допишите extern "C" в объявлении функции
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, _dg, Вы писали:
_dg>Ммм... а как это сделать? Я его добавляю в список SourceFiles/HeaderFiles/ResourceFiles — эффект нулевой, файл просто игнорируется. Может его нужно как-нибудь в самом тексте подключать?
P>>или сделай свою функцию extern "С"
_dg>В таком случае функция экспортируется с именем "_func1@0". Это конечно уже лучше, но все-таки не то 
А если убрать __declspec(dllexport)?!?