c++怎么定义API函数指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++怎么定义API函数指针相关的知识,希望对你有一定的参考价值。

#include <iostream.h>
#include <windows.h>
int main(int argc, char *argv[])

int Err;
int num;
HINSTANCE lib;
int (*clGetPlatformIDs)(int n,int b,int c);
lib=LoadLibrary("Z:\\X86\\OpenCL.dll");
clGetPlatformIDs=GetProcAddress(lib,"clGetPlatformIDs");
err = clGetPlatformIDs(0, 0, &num);
cout<<"Hello C-Free!"<<endl;
return 0;

--------------------配置: mingw5 - CUI Release, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 Z:\asdf\main.cpp...
[Warning] C:\PROGRA~1\C-FREE~1\mingw\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\backward\backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
[Error] Z:\asdf\main.cpp:10: error: invalid conversion from `int (*)()' to `int (*)(int, int, int)'
[Error] Z:\asdf\main.cpp:11: error: `err' was not declared in this scope
[Error] Z:\asdf\main.cpp:11: error: invalid conversion from `int*' to `int'
-------------------- --------------------------- --------------------
构建中止 main: 3 个错误, 1 个警告
本人菜鸡= = 。完全不知道哪错了,求教各位大大了。

第一处,你需要一个强制类型转换,最好用typedef,这样更轻松。
typedef int (WINAPI(如果有修饰的话,写这里) *PROCTYPE)(int n,int b,int c);

PROCTYPE clGetPlatformIDs = (PROCTYPE)GetProcAddress(lib,"clGetPlatformIDs");

这样就可以过去了。
后面的是因为err的首字母大小写吧。
第三个是因为num参数类型不符,你声明的时候是int,调用时候传&num,是int *。
恩就这样
参考技术A 至少这两行是错滴
int (*clGetPlatformIDs)(int n,int b,int c);
err = clGetPlatformIDs(0, 0, &num);
====
int (*clGetPlatformIDs)(int n,int *b,int *c);
Err = (*clGetPlatformIDs)(0, 0, &num);

以上是关于c++怎么定义API函数指针的主要内容,如果未能解决你的问题,请参考以下文章

C++指针问题,请问如何定义一个返回值为结构体指针数组的函数?

c++类的成员函数指针如何转为普通指针

使用指针调用 C++ DLL 函数

C++语言中,指针的英文单词是啥?

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

C++入门基础教程:C语言的指针与结构体到底怎么用?