Страница 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 писал(а):Совет - погугли о том, что такое динамическая и статическая линковка, внимательно прочти пару статеек
Что жалка пара стаек добавит к десяткам тысяч таких же статеек, но уже прочитанных и к тысячам книг?