【问题标题】:Why can I not use a value inside a IntPtr method? [closed]为什么我不能在 IntPtr 方法中使用值? [关闭]
【发布时间】:2016-02-20 09:00:44
【问题描述】:

除了错误使用 DLL 之外,当我尝试在 IntPtr 方法中使用 theTestValue 时,IntelliSense 会将其标记为失败。我想知道为什么会这样,因为我需要在这个方法的外部使用bool

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

【问题讨论】:

  • 阅读错误,也许?您正在尝试从静态方法设置实例成员。
  • 感谢您的荣耀提示。实际上,我不想花更多时间在这上面,因为这个 IntPtr Dll MSDN 东西让我恶心。我只想在从代码示例中获得的这段代码中使用这个值。
  • 与 int 指针完全无关,基本的 C# 语法。我的意思是你还有一个悬空的},导致你的return 语句在方法之外。您似乎也没有在任何地方使用_proc
  • 谢谢,这是因为我只是复制并粘贴了让我烦恼的完整代码的一部分。我以前做过 C# 教程,但这不是很好。现在我尝试为我的兄弟实现一些程序。但是这个 IntPtr 东西现在对我来说太高了。之后我搜索了一些基础知识。
  • 你有什么理由玩钩子,如果你说的是“让你恶心”?刚才好像有点高级。无论如何,让我们知道您的进展情况,如果您有任何其他问题将它们发布在这里,我们将很乐意提供帮助。祝你好运:)

标签: c# methods static-methods intptr


【解决方案1】:

您无法访问该字段,因为该方法是静态的,并且该字段已在实例级别声明(非静态)。如果您更改代码以使两者都为静态或非静态,则错误将消失。

【讨论】:

  • 谢谢!它的工作! :)
【解决方案2】:

theTestValue 设为静态或从 HookCallBack 函数中删除静态修饰符。如果该类被声明为静态,则所有成员也必须是静态的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多