从C#调用VC++dll中的回调函数
本文关键字:回调 函数 VC++dll 调用 | 更新日期: 2023-09-27 18:23:48
我需要从C#应用程序调用VC++dll中的回调函数。下面是VC++中的回调函数。
INT_PTR CALLBACK My_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
. . . . .
}
我已经导入了dll,但我不知道如何从C#调用该函数。有什么想法吗?
public class testClass
{
internal static class UnsafeNativeMethods
{
const string _dllLocation = "test.dll";
[DllImport(_dllLocation, CallingConvention = CallingConvention.Cdecl)]
public static extern int My_Proc(int value1, int value2, Int64 value3, int value4);// am getting stuck here
}
}
正确的声明是:
[DllImport("test.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr My_Proc(IntPtr hDlg, int message, IntPtr wparam, IntPtr lparam);
这是本机对话框的对话框过程的声明。Windows应该调用它,而不是你。当新的Windows消息可用于对话框时,它会执行此操作。它很少从DLL中导出,这也解释了出现问题的原因。获得正确的窗口句柄(hDlg)也不容易。但你没有很好地记录你的问题,所以我只能猜测。
在VC++中,您应该使用dll句柄:
hInst = ::GetModuleHandle("test.dll");
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, My_Proc);