c++指针函数和函数指针 以及 typedef用于函数指针
https://www.bilibili.com/video/BV1RJ411b7cq/?spm_id_from=333.337.search-card.all.click&vd_source=bdbb5be671dc7bcfadbe64bf3d0d2f95

typedef 函数指针
https://www.bilibili.com/video/BV1NE411a79m/?spm_id_from=333.337.search-card.all.click&vd_source=bdbb5be671dc7bcfadbe64bf3d0d2f95
Loadlibrary dll时候遇到的代码解析

int main()
{
//int (*p)(int, int);//可以理解为int (*)(int, int) p; 定义一个函数指针p,p的类型是int (*)(int, int)
HINSTANCE hDll = 0;
hDll = LoadLibrary("MyDll.dll");
if (!hDll) {
std::cout << "动态链接库 MyDll.dll 加载失败" << std::endl;
return -1;
}
typedef int (*PFN_ADD)(int a, int b);
//PFN_ADD 是函数指针p 重新定义的类型简写,之前是int (*)(int, int)过于麻烦
//函数指针的重定义特殊之处在于名字在中间而不是末尾!
void* pfn = GetProcAddress(hDll, "my_dll_add"); //GetProcAddress规定只能用void指针接受
if (pfn == 0) {
std::cout << "动态链接库中方法my_dll_add加载失败" << std::endl;
FreeLibrary(hDll);
return -1;
}
int a = 2, b = 3;
//int c = ((int (*)(int a, int b))pfn)(a, b); 用void指针前先转换好指针类型,直接转换或者typedef都可以
int c = PFN_ADD (pfn)(a, b);
std::cout << "my_dll_add(" << a << "," << b << ") = " << c << std::endl;
FreeLibrary(hDll);
return 0;
}
浙公网安备 33010602011771号