在C#中,我有一个IntPtr到WIN32 WndProc。调用它的语法是什么?

时间:2008-10-14 12:22:38

标签: c# .net winapi

我正在继承本机窗口(组合框的编辑控件......)

oldWndProc = SetWindowLong(HandleOfCbEditControl,GWL_WNDPROC,newWndProc);

在我的子类wndproc中,我会有这样的代码,对,但我无法弄清楚调用oldWndProc的语法。

    int MyWndProc(int Msg, int wParam, int lParam)
    {
         if (Msg.m ==  something I'm interested in...)
         {
              return something special
         }
         else
         {
              return result of call to oldWndProc  <<<<   What does this look like?***
         }

    }
编辑:此问题中的“子类化”一词是指WIN32 API的含义,而不是C#。这里的子类化并不意味着重写.NET基类行为。这意味着告诉WIN32调用你的函数指针而不是windows当前回调。它与C#中的继承无关。

3 个答案:

答案 0 :(得分:2)

您将通过P / Invoke调用CallWindowProc。只需将参数定义为int变量(因为它看起来就是你在SetWindowLong调用中定义它们的方式),所以像这样:

[的DllImport( “CallWindowProc的” ...] public static extern int CallWindowProc(int previousProc,int nativeControlHandle,int msg,int lParam,int wParam);

请记住,对于编组,int,uint和IntPtr都是相同的。

答案 1 :(得分:1)

您应该使用CallWindowProc来调用oldWndProc指针。

[DllImport("user32")]
private static extern int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam);

答案 2 :(得分:0)

site对您的所有互操作/ p调用工作非常有帮助(SetWindowLong