1

下面是头文件。任何人都可以提供一个想法来调用下面的回调函数。

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

我已经有了 hlginInstance 和 hDialog 函数,但是我需要帮助来调用回调函数。

问候, 珍妮丝

4

2 回答 2

0

该代码对我不起作用,我认为初始化有问题。

错误在这一行:- callbacks.m_pOnRequest = (hLoginInstance, hDialog, data, pdwAppParam) => 10;

谢谢,珍妮丝

于 2009-11-02T13:24:54.887 回答
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);
    }
} 
于 2009-11-02T09:05:57.287 回答