2009-11-02 193 views
1

下面是頭文件。任何人都可以給出一個想法來調用下面的回調函數。在C#中調用C dll函數,結構體和回調函數

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

代碼不工作,我認爲是有問題的init。

錯誤在這一行: - callbacks.m_pOnRequest =(hLoginInstance,hDialog,data,pdwAppParam)=> 10;

thankx, jeanix