Страница 3 из 4
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 17:31
Сионист
Romeo писал(а):Видимо имеет в виду #pragma которая доступна в студии, и которая не является кроссплатформенной, а потому не работает в MinGW.
Нет. Ни у Чалза в книге, ни у меня в исходниках нет вообще ни одного упоминания прагмы. Бибюлиотеки грузятся LoadLibrary, освобождаются FreeLibrary, а адреса берутся GetProcAdress.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 17:40
Romeo
Господи, а при чём тут динамическая линковка? Сионист, ты меня удивляешь в очередной раз. Ты ведь сам тему создал о статической линковке... И две страницы сообщений тоже было исключительно о статической линковке исписано. И тут на тебе... Похоже, ты не видишь разницы, раз умудрился заговорить о LoadLibrary.
Очень советую, обнови знания об этом разделе. На данный момент они у тебя крайне запутаны.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 17:51
Сионист
Код: Выделить всё
#include <windows.h>
LRESULT CALLBACK MainWindowWProcedure ( HWND Window ,
UINT Message ,
WPARAM First ,
LPARAM Second )
{
switch (Message)
{
case WM_DESTROY: PostQuitMessage(0);
break;
}
}
typedef HGDIOBJ (*TGetStockObject)(int);
TGetStockObject __imp_GetStockObject;
HMODULE Lib;
int WINAPI WinMain ( HINSTANCE Instance ,
HINSTANCE Previus ,
PSTR CommandLine ,
int Show )
{
WNDCLASSEX WindowClass;
Lib=LoadLibrary(L"GDI32.dll");
__imp_GetStockObject=(TGetStockObject)GetProcAddress(Lib, "GetStockObject");
WindowClass.cbSize =sizeof(WindowClass);
WindowClass.style =CS_HREDRAW|
CS_VREDRAW;
WindowClass.lpfnWndProc =MainWindowWProcedure;
WindowClass.cbClsExtra =0;
WindowClass.cbWndExtra =0;
WindowClass.hInstance =Instance;
WindowClass.hIcon =LoadIcon(NULL, IDI_APPLICATION);
WindowClass.hCursor =LoadCursor(NULL, IDC_CROSS);
WindowClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WindowClass.lpszMenuName =L"App.";
WindowClass.lpszClassName=L"App.";
WindowClass.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&WindowClass);
MSG Message;
HWND MainWindow;
MainWindow=CreateWindow(L"App.",
L"App." ,
WS_OVERLAPPEDWINDOW ,
CW_USEDEFAULT ,
CW_USEDEFAULT ,
CW_USEDEFAULT ,
CW_USEDEFAULT ,
NULL ,
NULL ,
Instance ,
NULL );
ShowWindow(MainWindow, Show);
UpdateWindow(MainWindow);
while (GetMessage(&Message, NULL, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
FreeLibrary(Lib);
return 0;
}
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 17:57
Romeo
Дай угадаю. Видимо, ты не прочёл мой предыдущий пост. То есть, помимо непрофессионализма демонстрируешь ещё и невнимательность.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 18:06
Сионист
DLL линкуются динамически, то есть на этапе исполнения, а значит и на целевой машине, где линкера просто нет. Более того, прилада может много раз линковать и отлиновывать разные DLL в зависимости от того, когда и какие нужны функции. Кроме того, линкером то линкуется конкретный исполняемый файл, а DLL загружается и выгружается в зависимости от потребностей многих прилад. Одна прилада загрузилась, ей нужна DLL, DLL загрузилась, вторая прилада загрузилась, ей тоже нужна эта же DLL, потом первая закрылась, DLL остаётся в памяти, но она была в памяти в одном экземпляре, когда исполнялись обе прилады.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 18:06
Сионист
Romeo писал(а):Дай угадаю. Видимо, ты не прочёл мой предыдущий пост. То есть, помимо непрофессионализма демонстрируешь ещё и невнимательность.
В отличие от тебя прочитал.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 18:07
Сионист
Romeo писал(а):Господи, а при чём тут динамическая линковка? Сионист, ты меня удивляешь в очередной раз. Ты ведь сам тему создал о статической линковке...
Бред. DLL линкуются динамически.
И две страницы сообщений тоже было исключительно о статической линковке исписано.
Статическая линковка упомянута лишь дважды, да и то в контексте во-первых линковки библиотек импорта, а не целевых библиотек, а во-вторых ещё и отказа от неё. Зато в первом же посте:
Можно ли GDI32.dll загрузить явно GDI32.dll загрузить явно
. Так что именно ты умудрился из всей темы прочитать единственное слово.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 18:24
Romeo
Сионист писал(а):Бред. DLL линкуются динамически.
Погоди. То есть когда ты указываешь в списке линковки, какую библиотеку залинковать (а именно так у тебя было сделано в первом посте данной темы), то если это DLL, то линковка сразу становится динамической? Ты просто даже не понимаешь сейчас насколько сильно втаптываешь себя в грязь.
Совет - погугли о том, что такое динамическая и статическая линковка, внимательно прочти пару статеек, а потом продолжим обсуждение, если оно ещё будет актуально. А пока не прочёл, лучше просто молчи. Это лучше, чем подобным образом показывать своё невежество.
И да, ответ на твой вопрос - DLL можно линковать как статически, там и динамически. В первом посте, где ты жаловался на ошибки линкера, происходит как раз статическая линковка.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 19:16
Сионист
Romeo писал(а):Погоди. То есть когда ты указываешь в списке линковки, какую библиотеку залинковать (а именно так у тебя было сделано в первом посте данной темы), то если это DLL, то линковка сразу становится динамической?
Нет. Она
не становится статической. Статически линкуется лишь код, отвечающий за загрузку и освобождение DLL и инициализацию указателей на библиотечные функции + сами указатели, но не сама DLL, тема о том, как этот код написать явно и явно объявить указатели на функции. DLL же в любом случае загружается на этапе исполнения. И если файл DLL на целевой функции отсутствует, то статическая линковка библиотеки импорта свойствами проекта не поможет, прога всё равно не будет работать.
Re: 24|undefined reference to `__imp_SaveDC'|
Добавлено: 22 окт 2015, 19:17
Сионист
Romeo писал(а):Совет - погугли о том, что такое динамическая и статическая линковка, внимательно прочти пару статеек
Что жалка пара стаек добавит к десяткам тысяч таких же статеек, но уже прочитанных и к тысячам книг?