簡體   English   中英

在 C# 中,我有一個 IntPtr 到 WIN32 WndProc。 調用它的語法是什么?

[英]In C#, I have a IntPtr to a WIN32 WndProc. What is the syntax for calling it?

我正在繼承本機窗口(組合框的編輯控件......)

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# 中的繼承無關。

您將通過 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 都是相同的。

您應該使用 CallWindowProc 來調用該 oldWndProc 指針。

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

站點將對您所有的互操作/p-invoke 工作( SetWindowLong )非常有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM