2010-03-24 7 views
7

मैं RegisterHotKey समारोह में देख रहा हूँ:सी # .NET में Win32 API में शून्य सूचक कैसे पास करें?

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 
); 

मैं IntPtr उपयोग कर रहे हैं पहला तर्क है, जो ज्यादातर मामलों में ठीक काम करता है में पारित करने के लिए। लेकिन अब मुझे जानबूझकर पहले तर्क के रूप में एक शून्य सूचक को पारित करने की आवश्यकता है, जो IntPtr (जानबूझकर) नहीं करेगा। मैं नेट के लिए नया हूँ, और यह मुझे परेशान है। मैं यह कैसे कर सकता हूँ?

+0

अन्य तरीके पहला तर्क पारित करने के लिए: https://stackoverflow.com/questions/47997942/how-do-i-handle-optional -c-dll-struct-arguments-in-c-sharp – River

उत्तर

15

उपयोग IntPtr.Zero के लिए NULL

उदाहरण के लिए:

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

आह, मैं इस धारणा के तहत था कि IntPtr.Zero ने 0. –

+2

@ थॉम के पूर्णांक मान के लिए गैर-शून्य सूचक का प्रतिनिधित्व किया, 'IntPtr.Zero' एक है 0 के पते के साथ सूचक। यह वास्तव में कुछ भी इंगित करता है क्योंकि पता 0 को संदर्भित करने से लगभग निश्चित रूप से दुर्घटना या अपवाद हो सकता है RTS। सी ++ मान NULL का एक ही व्यवहार होता है (0 के पते के साथ सूचक) इसलिए यह 'IntPtr.Zero' के साथ अच्छी तरह से मेल खाता है – JaredPar

संबंधित मुद्दे