2010-03-24 28 views
7

szukam w funkcji RegisterHotKey:Jak przekazać zerowy wskaźnik do Win32 API w C# .Net?

http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx

BOOL RegisterHotKey(
    __in HWND hWnd, 
    __in int id, 
    __in UINT fsModifiers, 
    __in UINT vk 
); 

Używam IntPtr zdać w pierwszym argumencie, który działa dobrze w większości przypadków. Ale teraz muszę celowo przekazać zerowy wskaźnik jako pierwszy argument, którego nie zrobię (celowo). Jestem nowy w .Net i to mnie denerwuje. Jak mogę to zrobić?

+0

Inne sposoby przechodzą pierwszy argument: https://stackoverflow.com/questions/47997942/how-do-i-handle-optional -c-dll-struct-arguments-in-c-ostry – River

Odpowiedz

15

Zastosowanie IntPtr.Zero dla NULL

Na przykład:

public void Example() { 
    ... 
    RegisterHotKey(IntPtr.Zero, id, mod, vk); 
} 

[DllImportAttribute("user32.dll", EntryPoint="RegisterHotKey")] 
[return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] 
public static extern bool RegisterHotKey(
    IntPtr hWnd, 
    int id, 
    uint fsModifiers, 
    uint vk); 
+0

Ach, miałem wrażenie, że IntPtr.Zero reprezentuje niepustą wartość na wartość całkowitą wynoszącą 0. –

+2

@Thom, 'IntPtr.Zero' to wskaźnik o adresie 0. Faktycznie nic nie wskazuje, ponieważ usunięcie adresu 0 prawie na pewno doprowadzi do awarii lub wyjątku rts. Wartość NULL w C++ ma takie samo zachowanie (wskaźnik o adresie 0), dlatego dobrze pasuje do 'IntPtr.Zero' – JaredPar

Powiązane problemy