2016-02-20 52 views
-3

除了錯誤地使用DLL,當我嘗試在IntPtr方法中使用theTestValue時,IntelliSense將其標記爲失敗。我想知道爲什麼會發生這種情況,因爲我需要在該方法內部使用外部的bool爲什麼我不能在IntPtr方法中使用值?

public partial class Form1 : Form 
{ 

    [DllImport("user32.dll")] 
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, 
    IntPtr wParam, IntPtr lParam); 

    [DllImport("user32.dll")] 
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, 
    IntPtr wParam, IntPtr lParam); 

    private static LowLevelKeyboardProc _proc = HookCallback; 
    private delegate IntPtr LowLevelKeyboardProc(
    int nCode, IntPtr wParam, IntPtr lParam); 

    public bool theTestValue = false; //This is the value 

    private static IntPtr HookCallback(
     int nCode, IntPtr wParam, IntPtr lParam) 
    { 
     theTestValue = true; //Red marked 

     } 
     return CallNextHookEx(_hookID, nCode, wParam, lParam); 
    } 
+1

閱讀錯誤,也許?您試圖從靜態方法中設置實例成員。 – CodeCaster

+0

感謝您的榮耀提示。實際上,我不想在此上花費更多時間,因爲此IntPtr DLL MSDN內容使我感到噁心。我只想在代碼示例中的代碼中使用此值。 – user3772108

+1

根本不相關int指針,基本的C#語法。我的意思是你也有一個懸掛'}',導致你的'return'語句在方法之外。你也不會在任何地方使用'_proc'。 – CodeCaster

回答

3

,因爲該方法是靜態的,現場已宣佈對實例級別(而不是靜態)不能訪問該字段。如果您更改代碼以使兩者都是靜態的,則錯誤將消失。

+0

謝謝!它的工作! :) – user3772108

1

使theTestValue靜態或從您的HookCallBack函數中刪除靜態修飾符。如果類聲明爲靜態,則所有成員也必須是靜態的。

相關問題