![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 3 Всего: 191 |
Здравствуйте. Вопрос очень простой
Не могу разобраться с прямым импортом функций API без использования стандартных header'ов Например, есть программа:
Как мне вручную объявить функцию Sleep, если убрать #include <windows.h> ? Как я ни пробовал, одни ошибки...не могу понять... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
||||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 3 Всего: 191 |
Нужно для одной версии компилятора, у которого нет многих библиотек API. Да и сам принцип хотелось бы узнать.
Или поставлю вопрос по-другому, как объявить ZwCreateFile (её нет в стандартных хедерах), скажем? Не через LoadLibrary, а напрямую...мне принцип нужно знать! |
|||
|
||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
Это как?
есть два способа: 1) обычный 1. подключить заголовочный файл с функцией 2. подключить библиотеку импорта 2) напрямую (через одно место) 1. загрузить DLL с помощью LoadLibrary 2. получить указатель на нужную функцию из этой библиотеки что-бы использовать эту функцию нужно установить WDK |
||||
|
|||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 3 Всего: 191 |
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
указать линкеру kernel32.lib
программа как-то так
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
ps
еще нужно подключить Kernel32.lib |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
вообще все что нужно - в таком случае указать линкеру lib и правильно написать объявление функции(тут могут быть варианты в зависимости от того какие соглашения у функций внутри либы. Хотя имея просмотрщик библиотек и анализируя декорированные имена эти соглашения можно вычислить).
Добавлено через 36 секунд а я что написал? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
на время сообщений посмотри зы если компилятор mingw, то libkernel32.a но там AFAIK достаточно указать компилятору kernel32, про расширение и lib он сам догадается |
|||
|
||||
| GolikovA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
может гвоорим об этом
// A simple program that uses LoadLibrary and // GetProcAddress to access myPuts from Myputs.dll. #include <windows.h> #include <stdio.h> typedef int (__cdecl *MYPROC)(LPWSTR); VOID main(VOID) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Get a handle to the DLL module. hinstLib = LoadLibrary(TEXT("myputs")); // If the handle is valid, try to get the function address. if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // If the function address is valid, call the function. if (NULL != ProcAdd) { fRunTimeLinkSuccess = TRUE; (ProcAdd) (L"Message sent to the DLL function\n"); } // Free the DLL module. fFreeResult = FreeLibrary(hinstLib); } // If unable to call the DLL function, use an alternative. if (! fRunTimeLinkSuccess) printf("Message printed from executable\n"); } |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |