Нет. Ни у Чалза в книге, ни у меня в исходниках нет вообще ни одного упоминания прагмы. Бибюлиотеки грузятся LoadLibrary, освобождаются FreeLibrary, а адреса берутся GetProcAdress.Romeo писал(а):Видимо имеет в виду #pragma которая доступна в студии, и которая не является кроссплатформенной, а потому не работает в MinGW.
24|undefined reference to `__imp_SaveDC'|
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Господи, а при чём тут динамическая линковка? Сионист, ты меня удивляешь в очередной раз. Ты ведь сам тему создал о статической линковке... И две страницы сообщений тоже было исключительно о статической линковке исписано. И тут на тебе... Похоже, ты не видишь разницы, раз умудрился заговорить о LoadLibrary.
Очень советую, обнови знания об этом разделе. На данный момент они у тебя крайне запутаны.
Очень советую, обнови знания об этом разделе. На данный момент они у тебя крайне запутаны.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Код: Выделить всё
#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;
}
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Дай угадаю. Видимо, ты не прочёл мой предыдущий пост. То есть, помимо непрофессионализма демонстрируешь ещё и невнимательность.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
DLL линкуются динамически, то есть на этапе исполнения, а значит и на целевой машине, где линкера просто нет. Более того, прилада может много раз линковать и отлиновывать разные DLL в зависимости от того, когда и какие нужны функции. Кроме того, линкером то линкуется конкретный исполняемый файл, а DLL загружается и выгружается в зависимости от потребностей многих прилад. Одна прилада загрузилась, ей нужна DLL, DLL загрузилась, вторая прилада загрузилась, ей тоже нужна эта же DLL, потом первая закрылась, DLL остаётся в памяти, но она была в памяти в одном экземпляре, когда исполнялись обе прилады.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
В отличие от тебя прочитал.Romeo писал(а):Дай угадаю. Видимо, ты не прочёл мой предыдущий пост. То есть, помимо непрофессионализма демонстрируешь ещё и невнимательность.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Бред. DLL линкуются динамически.Romeo писал(а):Господи, а при чём тут динамическая линковка? Сионист, ты меня удивляешь в очередной раз. Ты ведь сам тему создал о статической линковке...
Статическая линковка упомянута лишь дважды, да и то в контексте во-первых линковки библиотек импорта, а не целевых библиотек, а во-вторых ещё и отказа от неё. Зато в первом же посте:И две страницы сообщений тоже было исключительно о статической линковке исписано.
. Так что именно ты умудрился из всей темы прочитать единственное слово.Можно ли GDI32.dll загрузить явно GDI32.dll загрузить явно
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Погоди. То есть когда ты указываешь в списке линковки, какую библиотеку залинковать (а именно так у тебя было сделано в первом посте данной темы), то если это DLL, то линковка сразу становится динамической? Ты просто даже не понимаешь сейчас насколько сильно втаптываешь себя в грязь.Сионист писал(а):Бред. DLL линкуются динамически.
Совет - погугли о том, что такое динамическая и статическая линковка, внимательно прочти пару статеек, а потом продолжим обсуждение, если оно ещё будет актуально. А пока не прочёл, лучше просто молчи. Это лучше, чем подобным образом показывать своё невежество.
И да, ответ на твой вопрос - DLL можно линковать как статически, там и динамически. В первом посте, где ты жаловался на ошибки линкера, происходит как раз статическая линковка.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Нет. Она не становится статической. Статически линкуется лишь код, отвечающий за загрузку и освобождение DLL и инициализацию указателей на библиотечные функции + сами указатели, но не сама DLL, тема о том, как этот код написать явно и явно объявить указатели на функции. DLL же в любом случае загружается на этапе исполнения. И если файл DLL на целевой функции отсутствует, то статическая линковка библиотеки импорта свойствами проекта не поможет, прога всё равно не будет работать.Romeo писал(а):Погоди. То есть когда ты указываешь в списке линковки, какую библиотеку залинковать (а именно так у тебя было сделано в первом посте данной темы), то если это DLL, то линковка сразу становится динамической?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Что жалка пара стаек добавит к десяткам тысяч таких же статеек, но уже прочитанных и к тысячам книг?Romeo писал(а):Совет - погугли о том, что такое динамическая и статическая линковка, внимательно прочти пару статеек
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.