2016-02-20 54 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函数中删除静态修饰符。如果类声明为静态,则所有成员也必须是静态的。

相关问题