|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.06.2011, 16:34 | #1 |
Форумчанин
Регистрация: 11.02.2011
Сообщений: 131
|
Вопросы от новичка
Всем привет и здравствуйте. Вчера начал изучать WinApi, дошёл до примера исходного кода, переписал его к себе в компилятор. Вот код:
Код:
undefined reference to 'GetObjectA@12' undefined reference to 'CreateCompatibleDC@4' undefined reference to 'SelectObject@8' undefined reference to 'StretchBlt@44' undefined reference to 'SelectObject@8' undefined reference to 'DeleteObject@4' undefined reference to 'DeleteDC@4' Хотелось бы узнать: 1. Что они означают. 2. Как их исправить. 3. В книге, по которой я изучаю WinApi написано, что там рассмотрен язык для Windows98 и WindowsNT. У меня стоит WindowsXP. Есть ли различия между программированием в разных виндоузах и насколько они существены? Последний раз редактировалось rpy3uH; 30.06.2011 в 17:00. |
30.06.2011, 21:00 | #2 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
undefined reference означает, что функция на которую вы ссылаетесь в коде отсутстует в DLL. Все эти функции входят в gdi32.dll и дело тут похоже вот в чем. При экспорте функций различные компиляторы могут различным образом искажать имена функций, под которыми они потом хранятся в разделе экспорта. Соответственно эти же компиляторы ожидают, что в разделе экспорта эти функции будут значаться под искаженными именами. Я сам сижу на XP SP3, только что запустил BinDump и в разделе экспорта GDI32.dll функции перечислены без искажения (см. приложение). По всей видимости компилятор следуя собственным правилам ищет их под искаженными именами и не находит. Вообще у меня с этим слабо, но могу сказать что в Visual Studio с этим проблем не возникает. Только что проверил - компилируется. Вы какой компилятор используете? Можно попробовать эти функции объявить с неискаженными именами используя extern.
Попробуйте вставить после #include <windows.h>: Код:
Но я совсем не уверен в том, что это поможет. Последний раз редактировалось Dogmat; 01.07.2011 в 13:18. |
01.07.2011, 13:16 | #3 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
Вообще самому интересно, как из подобных ситуаций выходить, неужели никто ничего больше не посоветует?
|
01.07.2011, 13:42 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
нужно подключать необходимые библиотеки, для ml(MSVC++) это или в коде через #pragma или в настройках проекта(библиотеки gdi32.lib)
для gcc в ком строке или опять же настройки проекта(если IDE какая то) библиотека libgdi32.a(в ком строке писать -lgdi32) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
01.07.2011, 16:55 | #5 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Код:
сишного сорца WinApi окошка под рукой не нашел вот на Delphi Код:
|
01.07.2011, 19:39 | #6 | |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
Цитата:
|
|
03.07.2011, 12:40 | #7 |
Форумчанин
Регистрация: 11.02.2011
Сообщений: 131
|
Всем спасибо огромное за помощь!
Код:
|
03.07.2011, 12:47 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы мой пост не видели?
там ведь описано решение. библиотеки->добавить и выбрать libgdi32.a с таким подходом и в студии не выйдет ничего(правда там по умолчанию они подключены, но чуть шаг влево, выйдут теже ошибки) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
03.07.2011, 21:42 | #9 |
Форумчанин
Регистрация: 11.02.2011
Сообщений: 131
|
Если я правильно понял, то надо просто добавить #pragma <gdi32.lib> в код. Не помогло. Видимо, я неправильно понял.
|
03.07.2011, 22:46 | #10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
мдя, читаете вы очень не внимательно:
1)#pragma comment(lib,"gdi32.lib") 2)я же сказал что это только для студийного компилятора. для CodeBlocks смотрите настройки проекта. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы новичка | Tyfun | Помощь студентам | 1 | 08.09.2010 08:07 |
Вопросы от новичка | valenina | Общие вопросы Delphi | 10 | 31.05.2010 09:35 |
Вопросы новичка(C++) | NetGod | Общие вопросы C/C++ | 22 | 17.04.2009 22:49 |
Вопросы новичка! | Dimixis | Помощь студентам | 16 | 19.06.2007 10:35 |