Вызов функции обратного вызова в VC ++ DLL из C # - PullRequest
3 голосов
/ 08 февраля 2012

Мне нужно вызвать функцию обратного вызова в VC ++ DLL из приложения C #. Ниже приводится функция обратного вызова в 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

    }
}

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Правильная декларация:

    [DllImport("test.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr My_Proc(IntPtr hDlg, int message, IntPtr wparam, IntPtr lparam);

Это объявление для процедуры диалога собственного диалога. Windows должна называть это, а не вы. Это происходит, когда для диалогового окна доступно новое сообщение Windows. Он очень редко экспортируется из DLL, что также объясняет наличие проблем. Получить правильный дескриптор окна (hDlg) тоже непросто. Но вы плохо документировали свою проблему, поэтому я могу только догадываться.

0 голосов
/ 09 июня 2012

в VC ++ все, что вам нужно использовать дескриптор DLL:

hInst = ::GetModuleHandle("test.dll");
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, My_Proc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...