我正在尝试实现一个返回指针数组的回调函数。这是我的代码,但我不断收到错误消息。有没有人知道返回指针数组的回调函数的正确语法?
代码:
//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
答案 0 :(得分:2)
不要返回数组。
相反,让调用者传递一个你填写的数组。
如果你分配并返回一个数组,那么当调用者去释放它时,你最终会遇到不匹配的deallocator问题。
另一种选择是使用SAFEARRAY
,其中分配器和解除分配器都由操作系统提供,而不是由编译器供应商提供。
答案 1 :(得分:1)
您已将ai_main_botmovestates
声明为指针数组,但您尝试为其指定单个值。您需要将其声明为指针的指针,或者您需要指定数组的单个元素。
答案 2 :(得分:0)
我将定义更改为:
struct bot_movestate_s **ai_main_botmovestates;