C++调用.DLL里的函数出现以下问题要怎麼解决?请大神指点
voidCSilabsMCU_UIDlg::OnOK(){//TODO:AddextravalidationhereHINSTANCEhDllInst;DWORDNumD...
void CSilabsMCU_UIDlg::OnOK()
{
// TODO: Add extra validation here
HINSTANCE hDllInst;
DWORD NumDevices;
hDllInst=::LoadLibrary("SiUSBXp.dll");
if(hDllInst==NULL)
{
AfxMessageBox("Fail");
}
void* lpproc;
lpproc=(void*)GetProcAddress(hDllInst,"SI_GetNumDevices()");
if(lpproc!=(void*)NULL)
(* lpproc)(NumDevices); //编译时这句提示非法指针,为什麽?要怎麼解决?
AfxMessageBox(NumDevices);
FreeLibrary(hDllInst);
CDialog::OnOK();
}
SI_GetNumDevices()描述如下
Prototype: SI_STATUS SI_GetNumDevices (LPDWORD NumDevices)
Parameters: 1. NumDevices—Address of a DWORD variable that will contain the number of devices
connected on return.
Return Value: SI_STATUS = SI_SUCCESS or
SI_DEVICE_NOT_FOUND or
SI_INVALID_PARAMETER 展开
{
// TODO: Add extra validation here
HINSTANCE hDllInst;
DWORD NumDevices;
hDllInst=::LoadLibrary("SiUSBXp.dll");
if(hDllInst==NULL)
{
AfxMessageBox("Fail");
}
void* lpproc;
lpproc=(void*)GetProcAddress(hDllInst,"SI_GetNumDevices()");
if(lpproc!=(void*)NULL)
(* lpproc)(NumDevices); //编译时这句提示非法指针,为什麽?要怎麼解决?
AfxMessageBox(NumDevices);
FreeLibrary(hDllInst);
CDialog::OnOK();
}
SI_GetNumDevices()描述如下
Prototype: SI_STATUS SI_GetNumDevices (LPDWORD NumDevices)
Parameters: 1. NumDevices—Address of a DWORD variable that will contain the number of devices
connected on return.
Return Value: SI_STATUS = SI_SUCCESS or
SI_DEVICE_NOT_FOUND or
SI_INVALID_PARAMETER 展开
展开全部
typedef SI_STATUS (* LPPROC_TYPE) (LPDWORD)
LPPROC_TYPE lpproc = (LPPROC_TYPE)GetProcAddress(hDllInst,"SI_GetNumDevices()");
你只用void *是不行的,函数指针类型要包含参数类型和丛睁返回类型的描首镇述,编译器才能理解如何为你的*lpproc调用配渗芹岁置参数。
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的指针。
前面应该也有错,我漏掉一个分号
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询