Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 22:44   #1
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
Стрелка Хуки клавиатуры

Доброго времени суток. Решил научиться хуки отлавливать, заодно и dll создавать. Написал код, но что-то не работает он. Не может найти функцию в открытой библиотеке dll.
Подскажите, плз, что не так делаю.

Код mylib.dll

Код:
#define __MY_PROJ_DLL

#include "stdafx.h"

extern "C" __declspec(dllexport) 
LRESULT CALLBACK hProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode < 0)
        return CallNextHookEx(NULL, nCode, wParam, lParam); 

	if(lParam & 0x80000000) 
		MessageBox(0,(LPCWSTR)(int)wParam,0,0);

    return CallNextHookEx(NULL, nCode, wParam, lParam); 

}
Код Сипипишника

Код:
#include <Windows.h>
#include <iostream>
using namespace std;

HINSTANCE hLib; 
HHOOK hHook;

void main()
{
	HOOKPROC hProc = NULL;
    hLib = LoadLibrary(L"mylib");

    hProc = (HOOKPROC)GetProcAddress(hLib, "hProc");  
	
    hHook = SetWindowsHookEx(WH_KEYBOARD, hProc, hLib, NULL);                     
	FreeLibrary((HMODULE)hLib);
}
alexey_kip вне форума Ответить с цитированием
Старый 02.03.2013, 20:37   #2
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Неужели никто ничего не может ответить?
Вот еще проще (у меня подозрения на CALLBACK)
Код:
//dlllib.dll
#include "stdafx.h"

extern "C" __declspec(dllexport) 
LRESULT CALLBACK hProc(int i) 
{ 
	return FALSE;
}
Код:
//123.cpp
#include <Windows.h>

void main()
{
    HMODULE hLib = LoadLibrary(L"dlllib");
    FARPROC c=GetProcAddress(hLib, "hProc");
    FreeLibrary((HMODULE)hLib);
}
Здесь в переменную "с" не поступает никакого адреса. ПОЧЕМУ??
alexey_kip вне форума Ответить с цитированием
Старый 02.03.2013, 20:52   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

GetLastError рулит. Для начала проверь, LoadLibrary успешно завершается или нет.
Somebody вне форума Ответить с цитированием
Старый 02.03.2013, 22:27   #4
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

LoadLibrary нормально работает. При GetProcAddress ошибка в GetLastError 127. Что она означает?

Такая же ошибка, если я задам имя функции, которую там вообще не описываю

Последний раз редактировалось Stilet; 02.03.2013 в 23:24.
alexey_kip вне форума Ответить с цитированием
Старый 02.03.2013, 23:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ERROR_PROC_NOT_FOUND
Имя процедуры в ДЛЛ неверное (не нашло оно там такой).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.03.2013, 07:09   #6
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Я уже догадался, что он не находит, но почему?
alexey_kip вне форума Ответить с цитированием
Старый 03.03.2013, 11:06   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

stdafx.h - значит пользуетесь Visual Studio.
Там гдето в меню было чтото типа Visual Studio Command Prompt - откроестся консольное окно, там пишем:
dumpbin /exports c:\path\to\your.dll и покажите здесь результат.
waleri вне форума Ответить с цитированием
Старый 03.03.2013, 14:29   #8
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Все, разобрался.
Приведу рабочий код:

Код:
//dlllib.dll
#include "stdafx.h"

extern "C" __declspec(dllexport) 
LRESULT CALLBACK hProc(int i) 
{ 
	return FALSE;
}
Код:
//123.cpp
#include <Windows.h>

void main()
{
    HMODULE hLib = LoadLibrary(L"dlllib");
    FARPROC c=GetProcAddress(hLib, "_hProc@4");
    FreeLibrary((HMODULE)hLib);
}

_hProc@4, где 4 - размер занимаемой аргументами памяти.
alexey_kip вне форума Ответить с цитированием
Старый 03.03.2013, 14:34   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Похоже на overload функцию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хуки клавиатуры alexey_kip Общие вопросы C/C++ 7 09.09.2012 15:17
windows хуки videolord Общие вопросы C/C++ 1 09.01.2012 14:18
Хуки в C# kostaNew C# (си шарп) 1 19.08.2011 23:30
хуки Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 27 09.08.2011 09:50
принадлежит ли число, введённое с клавиатуры отрезку (а;в). Границы отрезка вводятся с клавиатуры Maria, Russia Помощь студентам 3 17.02.2009 22:01