【问题标题】:Invoke C dll functions,structs and callbacks in C#在 C# 中调用 C dll 函数、结构和回调
【发布时间】:2009-11-02 06:27:24
【问题描述】:

下面是头文件,谁能给个思路,调用下面的回调函数。

//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函数,但是调用回调函数需要帮助。

问候, 珍妮克斯

【问题讨论】:

    标签: c# struct callback marshalling invoke


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      谢谢, 珍妮克斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-10
        • 2010-10-15
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多