Что нового

Передать структуру rect в функцию длл

badhabit

Новичок
Сообщения
36
Репутация
0
Добрый день. У меня есть длл со следующей функцией:
Код:
enum MouseButton { MouseLeft, MouseMiddle, MouseRight };

MOUSEDLL_API int MouseClick(const HWND hwnd, const RECT rect, const MouseButton button, const int clicks,
							const HWND restore_focus, const POINT restore_cursor)
Пытаюсь вызвать данную функцию из скрипта^
Код:
Opt("WinTitleMatchMode", -2)

#include <WinAPI.au3>

Func MyMouseClick($hwnd, $left, $top, $right, $bottom)
	Local $rc = DllStructCreate($tagRECT)
	DllStructSetData($rc, 1, $left)
    DllStructSetData($rc, 2, $top)
    DllStructSetData($rc, 3, $right)
    DllStructSetData($rc, 4, $bottom)
	Local $pc = DllStructCreate($tagPOINT)
	DllStructSetData($pc, 1, -1)
    DllStructSetData($pc, 2, -1)
 	DllCall("mouse.dll", "int", "MouseClick", "hwnd", $hwnd, "ptr",  DllStructGetPtr($rc), "int", 0, "int", 1, "hwnd", 0,  "ptr",  DllStructGetPtr($pc))

	ConsoleWrite("DllCall() result: " & @error & @CRLF)
EndFunc


$wnd = WinGetHandle("help")
MyMouseClick($wnd, 100, 100, 150, 150)

Скрипт крашится, видимо где-то напутал с параметрами DllCall(). Подскажите, что может быть не так...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Может быть
Код:
DllCall("mouse.dll", "int", "MouseClick", "hwnd", $hwnd, "struct",  $rc, "int", 0, "int", 1, "hwnd", $hwnd,  "struct",  $pc)
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
inververs сказал(а):
Может быть
Код:
DllCall("mouse.dll", "int", "MouseClick", "hwnd", $hwnd, "struct",  $rc, "int", 0, "int", 1, "hwnd", $hwnd,  "struct",  $pc)
Попробовал:
Код:
DllCall("mouse.dll", "int", "MouseClick", "hwnd", $hwnd, "struct",  $rc, "int", 0, "int", 1, "hwnd", 0,  "struct",  $pc)

все равно "крашится"... В чем может быть дело? Из программы на С функция прекрасно вызывается...
ЗЫ. второй hwnd должен быть = NULL
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
А так?
Код:
DllCall("mouse.dll", "int:cdecl"...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
badhabit
а проверь, структура передается? как я написал, только поправь возврат на int:cdecl


Добавлено:
Сообщение автоматически объединено:

Код:
DllCall("mouse.dll", "int:cdecl", "MouseClick", "hwnd", $hwnd, "struct",  $rc, "int", 0, "int", 1, "hwnd", 0,  "struct",  $pc)
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
inververs сказал(а):
badhabit
а проверь, структура передается? как я написал, только поправь возврат на int:cdecl


Добавлено:
Сообщение автоматически объединено:

Код:
DllCall("mouse.dll", "int:cdecl", "MouseClick", "hwnd", $hwnd, "struct",  $rc, "int", 0, "int", 1, "hwnd", 0,  "struct",  $pc)




да, проверил - именно так передаётся все корректно.
указатель на структуру, как в моем первом варианте, передавать не надо было...
 
Верх