Ik wil het gebruik van de functie CallNextHook beetje generiek opzetten, en heb daarvoor het volgende bedacht:
Dit werkt niet, omdat ik geen pointers van managed types (LPARAM) door kan geven in C#. Het lParam wat binnenkomt in LowLevelKeyboardProc is bevat het adres naar de structure. Hoe kan ik ervoor zorgen dat ik in mijn functie dit adres kan gebruiken als de struct (zonder eerst een Marshal.PtrToStructure te hoeven doen), en expliciet gebruik blijven maken van de LPARAM (waar de beschikbare structs van zijn afgeleid) ivm de leesbaarheid?
De precieze foutmelding is trouwens:
Regel 31 en 35: Cannot take address or size of variable of a managed type ("User32.LPARAM")
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| public enum WPARAM : int { WM_KEYDOWN = 256 } public interface LPARAM { } public struct KBDLLHOOKSTRUCT : LPARAM { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } public struct MSLLHOOKSTRUCT : LPARAM { public POINT pt; public int mouseData; public int flags; public int time; public int dwExtraInfo; } public delegate int HOOKPROC (int nCode, WPARAM wParam, LPARAM * lParam); [DllImport("user32")] public static extern int CallNextHookEx(int hHook, int nCode, WPARAM wParam, LPARAM * lParam); //--- private int LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM * lParam) { return CallNextHookEx(hHook, nCode, wParam, lParam); } HOOKPROC hHook = new HOOKPROC(LowLevelKeyboardProc); |
Dit werkt niet, omdat ik geen pointers van managed types (LPARAM) door kan geven in C#. Het lParam wat binnenkomt in LowLevelKeyboardProc is bevat het adres naar de structure. Hoe kan ik ervoor zorgen dat ik in mijn functie dit adres kan gebruiken als de struct (zonder eerst een Marshal.PtrToStructure te hoeven doen), en expliciet gebruik blijven maken van de LPARAM (waar de beschikbare structs van zijn afgeleid) ivm de leesbaarheid?
De precieze foutmelding is trouwens:
Regel 31 en 35: Cannot take address or size of variable of a managed type ("User32.LPARAM")
[ Voor 8% gewijzigd door riezebosch op 03-11-2004 23:50 ]
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack