Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стек и преобразование 
V
    Опции темы
Mag
Дата 20.8.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



хук срабатывает на мышь:
 
Код

public delegate IntPtr HookDelegate(int Code, int wParam, IntPtr lParam);//lParam - Size = Cannot evaluate expression because a native frame is on top of the call stack.
...
  public HookDelegate _MouseDelegate;
...
 _MouseDelegate = new HookDelegate(ProcessMouseHook);
...
public void SetHook()
        {
            IntPtr hModule = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]);
            int ThreadId = Thread.CurrentThread.ManagedThreadId;
            long l = hModule.ToInt64();
            
            _MouseHook = SetWindowsHookEx(WH_MOUSE_LL, _MouseDelegate, l, ThreadId);
//проблемка с вторым параматером, выдает "A call to PInvoke function 'HookDLL!HookDLL.MessageHooker::SetWindowsHookEx' has unbalanced the stack. This is likely because the managed 
 //PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature."
}


Преобразование типа, в этом дело? Как быть?
  


Это сообщение отредактировал(а) Mag - 20.8.2007, 14:06
--------------------
В  каждой черной комнате есть выход - всегда есть выход с любой ситуации!
PM MAIL WWW ICQ   Вверх
Exception
Дата 20.8.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Покажи-ка сигнатуру SetWindowsHookEx.
PM   Вверх
Mag
Дата 20.8.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Код

[DllImport("User32.Dll")]
        public static extern IntPtr SetWindowsHookEx(int HookId, HookDelegate Delegate, long ModuleHandle, int ThreadId);


Это сообщение отредактировал(а) Mag - 20.8.2007, 17:59
--------------------
В  каждой черной комнате есть выход - всегда есть выход с любой ситуации!
PM MAIL WWW ICQ   Вверх
tdebugger
Дата 21.8.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.1.2007

Репутация: 2
Всего: 4



Интуитивно не нравится передача класса вместо указателя на функцию...

Попробуй воспользоваться методом Marshal.GetFunctionPointerForDelegate.
--------------------
ТЕХНОЛОГИЯ "JAVA"  НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt
PM MAIL MSN   Вверх
Mag
Дата 21.8.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Переделан хук(благодаря помощи tol05), вынесен в отдельное приложение, на одном компьютере работает - по двойному счелчку выводится меседж, на остальных компьютерах двойное нажатие в форме не срабатывает. Пример прикрепляю к сообщение. Посмотрите на семпл, в чем причина кроется?

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Hooksample.rar 32,26 Kb
--------------------
В  каждой черной комнате есть выход - всегда есть выход с любой ситуации!
PM MAIL WWW ICQ   Вверх
archeg
Дата 22.8.2007, 11:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Добавил в конструкторе
Код

this.Resize += new System.EventHandler(this.Form1_LocationChanged);
this.LocationChanged += new System.EventHandler(this.Form1_LocationChanged);

и все заработало smile 


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Mag
Дата 22.8.2007, 13:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.6.2005

Репутация: нет
Всего: нет



Цитата(archeg @  22.8.2007,  11:07 Найти цитируемый пост)
...и все заработало  

стыдно мне, недосмотрел.
Тема закрыта.


Это сообщение отредактировал(а) Mag - 22.8.2007, 13:04
--------------------
В  каждой черной комнате есть выход - всегда есть выход с любой ситуации!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.