我也怀疑该DLL为MFCDLL,所以我写了一个支持MFC的控制台程序进行测试,但是结果依旧,测试代码如下:
LPCTSTRsPath="TelphoneOpen.dll";
HINSTANCEhDll=NULL;
intret;
hDll=::LoadLibrary(sPath);
if(hDll==NULL)
{
cout<<"初始化出错"<<endl;
}
else
{
typedefint(__stdcall*pUserLogin)(LPCSTREnterpriseID,
LPCTSTRUser,LPCTSTRPassword,LPCTSTRServiceNo,boolUseProxy,
LPCTSTRProxyServer,LPCTSTRProxyUser,
LPCTSTRProxyPwd,intProxyPort,
LPCTSTRPreserve1);
pUserLoginUserLogint=NULL;//函数别名
UserLogint=(pUserLogin)GetProcAddress(hDll,"UserLogin");
//在DLL中声明的函数名
if(UserLogint)
{
chara1[20],a2[20],a3[20],a4[20],a5[20],a6[20],a7[20],a8[20];
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
memset(a3,0,sizeof(a3));
memset(a4,0,sizeof(a4));
memset(a5,0,sizeof(a5));
memset(a6,0,sizeof(a6));
memset(a7,0,sizeof(a7));
memset(a8,0,sizeof(a8));
strcpy(a1,"1200");
strcpy(a2,"mdc");
strcpy(a3,"name");
strcpy(a4,"password");
strcpy(a5,"");
strcpy(a6,"");
strcpy(a7,"");
strcpy(a8,"");
if((ret=UserLogint(a1,a2,a3,a4,0,a5,a6,a7,0,a8))!=0)
{
cout<<"连接数据库出错"<<endl;
}
else
{
cout<<"连接数据库成功"<<endl;
}
}
else
{
cout<<"取函数地址出错"<<endl;
}
FreeLibrary(hDll);
说明:该段代码放到有界面的程序里执行是不报错的,函数能成功返回值,但是在控制台程序里均在UserLogint(a1,a2,a3,a4,0,a5,a6,a7,0,a8)会出错,用debuger跟踪显示函数地址能取得,初始化都是成功的.
|