下面的代码是什么意思呢,请高手指点。
typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);FUNCTION_WITH_PROGRESS* m_pfnFunction;      

解决方案 »

  1.   

    typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);
    重定义类型(即别名)FUNCTION_WITH_PROGRESS* m_pfnFunction;      定义一个指向函数的指针. 我认为这样写会更好.
    typedef ULONG (PFUNCTION_WITH_PROGRESS*)(void* pData, CProgressThreadDlg* pProgressDlg);PFUNCTION_WITH_PROGRESS m_pfnFunction;
      

  2.   


      可以这样认为, 后面一个函数指针 m_pfnFunction, 实际上它是  ULONG *m_pfnFunction(void* pData, CProgressThreadDlg* pProgressDlg);  你应该去看一下函数指针的部分. 这种方式之后将对 m_pfnFunction 赋予不同的真正函数地址. 这样调用 (*m_pfnFunction)(), 就相当于调用了哪个函数. 
      

  3.   

    typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg);
    定义了一种函数类型,类似typedef struct{}StructType; 定义变量类型一样。
    该函数类型返回ULONG,参数是void* pData, CProgressThreadDlg* pProgressDlg);FUNCTION_WITH_PROGRESS* m_pfnFunction;      
    定义一个FUNCTION_WITH_PROGRESS类型的指针实例.即函数指针。这种方式在loadlibrary动态连接库调用中经常用到
      

  4.   

    这个语句是声明了一个指向函数的指针,这个函数返回ULONG;这个函数的参数有两个一个是void指针,一个是CProgressThreadDlg指针.
    为什么要声明这个东西呢,就是为了让你方便.typedef就有这个功能.
    如果你需要定义一个这样的函数.你就可以直接使用PFUNCTION_WITH_PROGRESS很方便,就和你定义一个变量一样(int a);
    你定义函数的时候是这样:
    PFUNCTION_WITH_PROGRESS* fun;编译器在看到这个语句时就知道fun是一个函数指针.
      

  5.   

    (1)哦,那
    ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg)
    是一个整体吧?这个更像是类型声明,而不是起别名,对吗?
    (2)对比下面的定义
    typedef set<int> MYINTSET;
    这么说:ULONG (FUNCTION_WITH_PROGRESS)(void* pData, CProgressThreadDlg* pProgressDlg)相当于set<int>的位置,对吗?
      

  6.   

    明白了。
    (1)
    typedef ULONG (FUNCTION_WITH_PROGRESS)(void* pData,  CProgressThreadDlg* pProgressDlg);
    FUNCTION_WITH_PROGRESS* m_pfnFunction;
    (2)
    typedef ULONG (PFUNCTION_WITH_PROGRESS*)(void* pData, CProgressThreadDlg* pProgressDlg);
    PFUNCTION_WITH_PROGRESS m_pfnFunction
    (3)直接定义
    ULONG (m_pfnFunction*)(void* pData, CProgressThreadDlg* pProgressDlg);
    三种方式是一个意思,对吧。