![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Как, попросить компилятор узнать определена ли функция или нет?
Компилятор, насколько я понял, это проверяет, лишь в том случае, если в коде функция где-то вызывается. Но как быть с ДЛЛ? Допустим я пишу
А определение функции нигде не пишу. Компиляция проходит на ура. Но ошибки конечно возникают когда вызываешь, эту функцию из другой DLL или исполняемого файла. Так вот, как бы мне повесить проверку, на то есть ли определение или нет. Единственный вариант мне кажется возможным, это вызвать для теста где-нибудь, эту функцию в самой родительской DLL, но рационально ли это? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Я очень рад. Но разве нет никаких макросов, сказать линковщику это проверить?
|
|||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Это прототип, интерфейс, чтобы компилятор мог тебя за рукав дернуть, если ты будеш вызывать функцию с другими типами.
Компилятор создает объектные файлы (.o), которые используются линковщиком. На этапе линковки ты и так узнаеш нашел он адрес нужной функции в одном из модулей или нет, о чем и получишь честно unresolved external. В общем это не задача компилятора делать такую проверку, тем более, что она не всегда может быть выполнена, когда отстуствуют полные исходники других модулей, а есть лишь собранные библиотеки. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если речь идет именно о dll , то там позднее связывание функций в режиме рантайма
ни компилятор ни линкер к ьтому отношению не имеет за случаи ранего связывания отвечает линкер - и если он не найдет подходяшего то обязательно сообшит )) |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Функция GetProcAddress вернет NULL, если в твоей DLL не окажется запрошенной функции.
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |