2010-03-24 32 views
7

Tôi nhìn vào Function RegisterHotKey:Làm thế nào để vượt qua con trỏ null để Win32 API trong 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 
); 

Tôi đã sử dụng IntPtr để vượt qua trong các đối số đầu tiên, trong đó hoạt động tốt trong hầu hết các trường hợp. Nhưng bây giờ tôi cần phải cố ý vượt qua một con trỏ null là đối số đầu tiên, mà IntPtr (cố ý) sẽ không làm. Tôi mới vào. Net, và điều này khiến tôi bối rối. Tôi có thể làm cái này như thế nào?

+0

Các cách khác để vượt qua các đối số đầu tiên: https://stackoverflow.com/questions/47997942/how-do-i-handle-optional -c-dll-struct-arguments-in-c-sharp – River

Trả lời

15

Sử dụng IntPtr.Zero cho NULL

Ví dụ:

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

Ah, tôi đã được ấn tượng rằng IntPtr.Zero đại diện cho một con trỏ không null đến một giá trị số nguyên 0. –

+2

@Thom, 'IntPtr.Zero' là một con trỏ với địa chỉ 0. Nó thực sự trỏ đến không có gì vì dereferencing địa chỉ 0 gần như chắc chắn sẽ dẫn đến một vụ tai nạn hoặc ngoại lệ như vậy rts. Giá trị C++ NULL có cùng một hành vi (con trỏ với địa chỉ 0) do đó nó phù hợp độc đáo với 'IntPtr.Zero' – JaredPar

Các vấn đề liên quan