Вызывать функции, структуры и обратные вызовы C dll в C # - PullRequest
1 голос
/ 02 ноября 2009

Ниже приведен заголовок файла. Кто-нибудь может дать идею вызвать функцию обратного вызова ниже.

//Function Prototype

int PASCAL EXPORT RegisterCallbackFunctions (TCallbacks CallbackFuncs);

//Data Structure

struct TCallbacks
{
LPONUSSDREQUEST m_pOnRequest;
LPONUSSDRESPONSE m_pOnResponse;
};

struct TData
{
   DWORD  m_dwCmd;     
   BYTE   m_bVersion; 
   BYTE   m_bCodeScheme;   
   DWORD  m_dwErrorCode; 
   char   m_szMsIsdn[15];
}


//Prototypes



typedef int (*LPONUSSDREQUEST) (HANDLE hLoginInstance, HANDLE hDialog, TData data, DWORD *pdwAppParam);

typedef int (*LPONUSSDRESPONSE) (HANDLE hLoginInstance, HANDLE hDialog, char szString [ ], DWORD dwAppParam);

У меня уже есть функции hloginInstance и hDialog, но мне нужна помощь в вызове функции обратного вызова.

С уважением, Jeanix

Ответы [ 2 ]

0 голосов
/ 02 ноября 2009

Код не работает, я думаю, что есть проблема init.

Ошибка в этой строке: - callbacks.m_pOnRequest = (hLoginInstance, hDialog, data, pdwAppParam) => 10;

Thankx, jeanix

0 голосов
/ 02 ноября 2009

В .NET вы можете использовать делегатов:

class Program
{
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate int RequestDelegate(
        IntPtr hLoginInstance, 
        IntPtr hDialog, 
        IntPtr data, 
        int pdwAppParam);

    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate int ResponseDelegate(
        IntPtr hLoginInstance, 
        IntPtr hDialog, 
        string szString, 
        int dwAppParam);

    [DllImport("somelib.dll")]
    public static extern void RegisterCallbackFunctions(TCallbacks callbacks);

    public struct TCallbacks
    {
        public RequestDelegate m_pOnRequest;
        public ResponseDelegate m_pOnResponse;
    }

    static void Main(string[] args)
    {
        TCallbacks callbacks;
        callbacks.m_pOnRequest = 
            (hLoginInstance, hDialog, data, pdwAppParam) => 10;
        callbacks.m_pOnResponse = 
            (hLoginInstance, hDialog, szString, dwAppParam) => 20;
        RegisterCallbackFunctions(callbacks);
    }
} 
...