如何编写一个返回指针数组的回调函数?

时间:2011-12-17 05:20:52

标签: c windows

我正在尝试实现一个返回指针数组的回调函数。这是我的代码,但我不断收到错误消息。有没有人知道返回指针数组的回调函数的正确语法?

代码:

    //The original array is here:
    __declspec(dllexport) bot_movestate_t *botmovestates[MAX_CLIENTS+1];
    __declspec(dllexport) struct bot_movestate_s **Getbotmovestates( void )
    {
        return botmovestates;
    }

/ --------------- /

//The caller    
    struct bot_movestate_s *ai_main_botmovestates[MAX_CLIENTS+1];
    typedef struct bot_movestate_s **(* fGetbotmovestates_t)( void );
    struct bot_movestate_s **fGetbotmovestates( fGetbotmovestates_t pfGetbotmovestates ){
        return pfGetbotmovestates();
    }

    //sm func
    void smfunc()
    {
        fGetbotmovestates_t pfGetbotmovestates;
        HMODULE hLib;

    /////////////////////////////

        hLib = LoadLibrary(TEXT("smdll.dll"));
            if (hLib == NULL) {
            //Module not found, permission denied, ...
            return; //inform caller of error
        }

        pfGetbotmovestates = (fGetbotmovestates_t)GetProcAddress(hLib, TEXT("Getbotmovestates"));
        if ( pfGetbotmovestates == NULL) {
            return;
        }

        ai_main_botmovestates = fGetbotmovestates(pfGetbotmovestates);//error C2106: '=' : left operand must be l-value

    /////////////////////////////

    }
    //error
    error C2106: '=' : left operand must be l-value

3 个答案:

答案 0 :(得分:2)

不要返回数组。

相反,让调用者传递一个你填写的数组。

如果你分配并返回一个数组,那么当调用者去释放它时,你最终会遇到不匹配的deallocator问题。

另一种选择是使用SAFEARRAY,其中分配器和解除分配器都由操作系统提供,而不是由编译器供应商提供。

答案 1 :(得分:1)

您已将ai_main_botmovestates声明为指针数组,但您尝试为其指定单个值。您需要将其声明为指针的指针,或者您需要指定数组的单个元素。

答案 2 :(得分:0)

我将定义更改为:

struct bot_movestate_s **ai_main_botmovestates;