C++调用.DLL里的函数出现以下问题要怎麼解决?请大神指点
答案:1 悬赏:70 手机版
解决时间 2021-11-27 16:05
- 提问者网友:星軌
- 2021-11-27 05:35
C++调用.DLL里的函数出现以下问题要怎麼解决?请大神指点
最佳答案
- 五星知识达人网友:山有枢
- 2021-11-27 06:54
typedef SI_STATUS (* LPPROC_TYPE) (LPDWORD)
LPPROC_TYPE lpproc = (LPPROC_TYPE)GetProcAddress(hDllInst,"SI_GetNumDevices()");
你只用void *是不行的,函数指针类型要包含参数类型和返回类型的描述,编译器才能理解如何为你的*lpproc调用配置参数。追问按这个方式去试了一下,提示'LPPROC_TYPE' : undeclared identifier。我觉得 (这里是不是缺类型* LPPROC_TYPE)追答#include
#include
typedef int SI_STATUS;
typedef int * LPDWORD;
typedef SI_STATUS (* LPPROC_TYPE) (LPWORD);
int fun1(int *);
void *GetProcAddress(int handle, const char *name)
{
return fun1;
}
int fun1(int *p)
{
*p += 1;
return 0;
}
main( )
{
LPPROC_TYPE lpproc = (LPPROC_TYPE)GetProcAddress(1, "a");
int a = 1;
(*lpproc)(&a);
printf("%d\n", a);
}
这是我测试代码,非window环境,没法作DLL,模拟了一个,返回fun1的指针。
前面应该也有错,我漏掉一个分号追问按你的方法试了,编译无问题,调试的时候会弹出系统错误(“回报错误,不回报”那种)
LPPROC_TYPE lpproc = (LPPROC_TYPE)GetProcAddress(hDllInst,"SI_GetNumDevices()");
你只用void *是不行的,函数指针类型要包含参数类型和返回类型的描述,编译器才能理解如何为你的*lpproc调用配置参数。追问按这个方式去试了一下,提示'LPPROC_TYPE' : undeclared identifier。我觉得 (这里是不是缺类型* LPPROC_TYPE)追答#include
#include
typedef int SI_STATUS;
typedef int * LPDWORD;
typedef SI_STATUS (* LPPROC_TYPE) (LPWORD);
int fun1(int *);
void *GetProcAddress(int handle, const char *name)
{
return fun1;
}
int fun1(int *p)
{
*p += 1;
return 0;
}
main( )
{
LPPROC_TYPE lpproc = (LPPROC_TYPE)GetProcAddress(1, "a");
int a = 1;
(*lpproc)(&a);
printf("%d\n", a);
}
这是我测试代码,非window环境,没法作DLL,模拟了一个,返回fun1的指针。
前面应该也有错,我漏掉一个分号追问按你的方法试了,编译无问题,调试的时候会弹出系统错误(“回报错误,不回报”那种)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯