Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中与硬件的交互_C_Winapi_Function_Pointers - Fatal编程技术网

c语言中与硬件的交互

c语言中与硬件的交互,c,winapi,function,pointers,C,Winapi,Function,Pointers,通过保存函数地址的指针调用函数会产生错误 代码: 但是当我通过(*p)()调用时,代码生成错误它表示术语的计算结果不是函数。 我是如何克服这个问题的?还有其他方法使用指针调用函数吗?您需要将GetProcAddress的返回值强制转换为正确的函数类型。例如: typedef void (*FuncPtr)(); //assuming a function like void f() FuncPtr p; p = (FuncPtr) GetProcAddress(h, "funcName"

通过保存函数地址的指针调用函数会产生错误 代码:

但是当我通过
(*p)()调用时,代码生成错误它表示术语的计算结果不是函数。

我是如何克服这个问题的?还有其他方法使用指针调用函数吗?

您需要将
GetProcAddress
的返回值强制转换为正确的函数类型。例如:

typedef void (*FuncPtr)();    //assuming a function like void f()
FuncPtr p;

p = (FuncPtr) GetProcAddress(h, "funcName");
if (p)
    p();
else
    printf("Function not found\n");

您需要将
GetProcAddress
的返回值强制转换为正确的函数类型。例如:

typedef void (*FuncPtr)();    //assuming a function like void f()
FuncPtr p;

p = (FuncPtr) GetProcAddress(h, "funcName");
if (p)
    p();
else
    printf("Function not found\n");

验证
p
声明如下:

void (*p)(void);

并且
GetProcAddress
的返回值类型相同。

验证
p
声明如下:

void (*p)(void);
并且
GetProcAddress
返回值的类型是相同的。

显示p的声明(如果是
typedef
,则显示其类型)显示p的声明(如果是
typedef
,则显示其类型)