2009-11-02 6 views
1

Ci-dessous est l'en-tête file.can quelqu'un s'il vous plaît donner une idée pour appeler la fonction de rappel ci-dessous.Appelez C dll fonctions, structures et rappels en 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); 

J'ai déjà eu les fonctions hloginInstance et hDialog, mais j'ai besoin d'aide pour appeler la fonction de rappel.

salutations, Jeanix

Répondre

0

Dans .NET, vous pouvez utiliser les délégués:

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

Le code ne me travaille pas, je pense qu'il ya un problème init.

L'erreur est dans cette ligne: - callbacks.m_pOnRequest = (hLoginInstance, hDialog, data, pdwAppParam) => 10;

merci, jeanix