| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Прямой импорт из DLL |
| Автор: Rrader 29.5.2008, 14:12 | ||
| Здравствуйте. Вопрос очень простой Не могу разобраться с прямым импортом функций API без использования стандартных header'ов Например, есть программа:
Как мне вручную объявить функцию Sleep, если убрать #include <windows.h> ? Как я ни пробовал, одни ошибки...не могу понять... |
| Автор: Fazil6 29.5.2008, 14:18 | ||
в чем смысл? |
| Автор: Rrader 29.5.2008, 14:21 |
| Нужно для одной версии компилятора, у которого нет многих библиотек API. Да и сам принцип хотелось бы узнать. Или поставлю вопрос по-другому, как объявить ZwCreateFile (её нет в стандартных хедерах), скажем? Не через LoadLibrary, а напрямую...мне принцип нужно знать! |
| Автор: Rrader 29.5.2008, 14:56 |
| Автор: Lazin 29.5.2008, 15:09 | ||
|
| Автор: Fazil6 29.5.2008, 15:10 | ||
| указать линкеру kernel32.lib программа как-то так
|
| Автор: Lazin 29.5.2008, 15:10 |
| ps еще нужно подключить Kernel32.lib |
| Автор: Fazil6 29.5.2008, 15:13 |
| вообще все что нужно - в таком случае указать линкеру lib и правильно написать объявление функции(тут могут быть варианты в зависимости от того какие соглашения у функций внутри либы. Хотя имея просмотрщик библиотек и анализируя декорированные имена эти соглашения можно вычислить). Добавлено через 36 секунд а я что написал? |
| Автор: Lazin 29.5.2008, 15:27 |
на время сообщений посмотри зы если компилятор mingw, то libkernel32.a но там AFAIK достаточно указать компилятору kernel32, про расширение и lib он сам догадается |
| Автор: GolikovA 31.5.2008, 01:19 |
| может гвоорим об этом // 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"); } |