2009-11-02 4 views
1

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

//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

ответ

0

В .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); 
    } 
} 
0

Кодекс не работает со мной, я думаю, что есть проблема инициализации.

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

thankx, jeanix

Смежные вопросы