我有一个C代码,用于记录数组中的过程地址
void* lpProcAddress[5];
typedef unsigned long (*MyFunction_TYPE) (void*);
#define MyFunctionInArray ( (MyFunction_TYPE) lpProcAddress[0] )
unsigned long AnyFunction ( void* lpPointerToAny )
{
/* Some Code */
return 0;
}
int main()
{
MyFunctionInArray =
AnyFunction; // Displays: "error: lvalue required as left operand of assignment"
}
GCC显示“错误:左值作为赋值的左操作数”。 我怎样才能解决这个问题? 出于我的目的,我无法直接调用AnyFunction()。
答案 0 :(得分:3)
这将扩展为:
(type)xxx = ...
这不合法。但是,您可以使用以下内容:
* (type *)& xxx = ...
答案 1 :(得分:0)
尝试直接分配到lpProcAddress[0]
,而不是MyFunctionInArray
。
这应该有用,你可以保持这种方式。
但是,如果您对为什么它不适用于您的定义保持阅读感兴趣,那么也有办法:
你在#define
中所做的是向MyFunction_TYPE投射指针类型
1)你真的不需要将指针数组转换为任何东西,你只需将函数指针分配到它的插槽中
2)如果你真的想在分配之前强制转换指针数组,你必须将其转换为函数指针类型(并在解除引用之前执行此操作,因此在[0]
之前使用括号)。
答案 2 :(得分:0)
不是将lpProcAddress定义为void *,而是将其定义为MyFunction_TYPE,例如:
typedef unsigned long (*MyFunction_TYPE) (void*);
MyFunction_TYPE lpProcAddress[5];
然后在你的主要功能中你可以做到:
lpProcAddress[0] = AnyFunction;
无需关心施法。
同样要调用该函数,您可以这样做:
result = lpProcAddress[0]( some_ptr );