![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| NWhisper |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 10.1.2007 Репутация: нет Всего: нет |
Всем привет! Встал интересный вопрос, можно ли так сделать на Visual C++?
Допустим, есть заголовочный файл: //file1.h
И есть исходник: //file1.cpp
После выполнения cl /MD file1.cpp получается файл file1.obj. Далее, пишем еще один исходник: //file2.cpp
После сборки этого исходника командой cl /LD /MD file2.cpp /link file.obj появляется file2.dll, которая не экспортирует App::foo. Может кто-нибудь сказать почему не экспортируется App::foo? |
||||||
|
|||||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
ИМХО, если правильно понял вопрос.
Таблица экспорта создается в обьектном файле в момент его создания, т.е компиляции. Насколько я понял, в file1.obj в таблицы экспорта, если она вообще будет создана, явно не будет твоего метода. Смысл таков, что не указав перед сборкой нужного файла какие функции экспортируются, они и не будут экспортироваться. В дальнейшем после компиляции это не изменить. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Откуда знаешь, что не экспортирует? Попробуй в первом случае написать не #define API а #define API __declspec(dllimport) -------------------- ... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
а че не написать
один раз в хедерном файле? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Тогда функции всегда будут экспортироваться, а нужно чтобы они при построении DLL экспортировались, а при построении EXE - импортировались.
Это стандартная техника, и все должно работать. Только удобнее делать примерно так:
Этот заголовок включается во все заголовочные файлы, которые описывают экспортирумые классы и функции MyDll. Кроме того, в настройках MyDLL прописывается символ препроцессора _MYDLL. И все. Когда заголовок (один и тот же) подключается к MyDLL - функции экспортируются, когда к EXE или другим DLL - импортируются. Всю жизнь так делаю (ну почти -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |