如何从 C# 函数传递 Win32 Dll api 的回调参数

本文关键字:api Dll 回调 参数 Win32 函数 | 更新日期: 2023-09-27 18:37:16

  1. 要从 C# 调用的 WIN32 函数:

    int PTSetGUICallbacks (  
      IN int hConnection,
      IN void *pGuiStreamingCallbackCtx,
      IN PT_GUI_STATE_CALLBACK pfnGuiStateCallback,
      IN void *pGuiStateCallbackCtx
    )
    
  2. Win32 回调函数原型"PT_GUI_STATE_CALLBACK":

    int PT_STD_GUI_STATE_CALLBACK (
      IN DWORD dwGuiState,
      OUT BYTE *pbyResponse,
      IN DWORD dwMessage
    )
    
  3. 我的 C# 函数用于在内部调用上述 Win32 函数,我正在传递 C# 函数作为对该 Win32 函数的回调:

    public void SetCallback() 
    {
      var callback_delegate = new PT_GUI_STATE_CALLBACK(GUI_STATE_CALLBACK);            
      GCHandle gch = GCHandle.Alloc(callback_delegate);
      IntPtr intptr_delegate =
        Marshal.GetFunctionPointerForDelegate(callback_delegate);       
      int mErrorCode = PTSetGUICallbacks(mDevHandle, IntPtr.Zero, intptr_delegate,  IntPtr.Zero);       
      gch.Free(); 
     }
    

这段代码不起作用,我的意思是我没有收到从 win32 API 到我的 C# 方法的回调 ( GUI_STATE_CALLBACK

所以现在我需要从我的 C# 函数将该回调传递给 win32 api。

有人知道答案吗?

  1. PIN32 API 的函数声明:

    public static extern int PTSetGUICallbacks(int ahConnection,
    IntPtr aStreamingcbCtx, IntPtr aGuiStateCb, IntPtr aGuiStateCbCtx);

对此有任何更新吗?

还有其他方法可以做到这一点吗?

如何从 C# 函数传递 Win32 Dll api 的回调参数

将 CallBack 函数定义为 "CallBack"

public static extern int PTSetGUICallbacks(
int ahConnection,IntPtr aStreamingcbCtx, 
CallBack aGuiStateCb, IntPtr aGuiStateCbCtx);

调用它:

CallBack cb = new CallBack(GuiCBFunction);
PTSetGUICallbacks(mDevHandle, IntPtr.Zero, cb,  IntPtr.Zero);

c# 中的回调:

int GuiCBFunction (UInt32 dwGuiState, IntPtr pbyResponse, UInt32 dwMessage )

"回调"示例:http://msdn.microsoft.com/de-de/library/a95009h1%28v=vs.80%29.aspx