zHz00 Untitled

вторник, 21 января 2014
23:07 Эмбарго
Прототип функции в DLL-библиотеке об'явлен через __declspec(dllexplort). Тело функции в наличии. Но в выходной библиотеке функция отсутствует. GetProcAddress возвращает FALSE. Всякие DLL Viewer также не показывает данной функции. При этом другие добавленные функции экспортируются нормально. Компилятор/компоновщик ошибок не выдают.

В параметрах функции было что-то типа int (& param)[3][4][5] -- ссылка на многомерный массив. Я думал, из-за этого. Но смена типа этого параметра не помогла.

Кроме того, я думал на несовпадение названий функции при об'явлении, определении и получении адреса, но это тоже оказалось не так. Названия функции при об'явлении и определении совпадали. И ничего похожего на это название в списке экспорта исполняемого файла не было.

Наконец, я понял, в чём причина. Различался список параметров! В теле функции было на 1 параметр больше, чем в прототипе (почему -- отдельный вопрос). Поэтому компилятор думал, что это перегруженные версии функции -- у одной есть тело, но нет прототипа, а у другой есть прототип, но нет тела. Это совершенно легально. Вопрос только в том -- почему компоновщик не стал ругаться на функцию, которая явно об'явлена на экспорт, но фактически отсутствует?

@темы: Программирование, Борьба с техникой

URL
Чем дальше в лес, тем больше сюра. :roll: Вчера поздно н...
По всей Корее через метр на два расставленны автоматы по ...
С чаем тут, кстати, беда. Ладно, что за привычным черным ...
Ах да, совсем забыл поинтересоваться... Кубики, а вы...
детский сад выводит из себя...
"А может быть, все немного иначе – и проблема вами н...
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии