DLL中使用ADO出现了编译问题
我想在DLL中用ADO访问数据库更改记录。数据库记录中有用户的账号和密码,输出函数定义为:_declspec(dllexport) USHORT ChangePwd(char *Account,char *NewPwd)
当用户账号=Account时,想把密码字段的值改为NewPwd。函数实现如下:
USHORT ChangePwd(char *Account,char *NewPwd)
{
CString strOpen="DSN=bank;UID=sa;PWD=";
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open((const char *)strOpen,"sa","",-1);
}
catch(...)
{
AfxMessageBox("数据库初始化错误,程序将关闭!");
return FALSE;
}
CString sql="select * from userfiles where zjzh=";
sql+="'";
sql+=Account;
sql+="'";
try
{
m_pUserSet->Open((_variant_t)sql,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pFieldsPtr=m_pUserSet->Fields;
m_pFieldPtr=m_pFieldsPtr->Item["yhmm"];
m_pFeildPtr->Value=(_variant_t)NewPwd;
m_pUserSet->Update();
m_pUserSet->Close();
}
catch(...)
{
AfxMessageBox("访问数据库服务器时发生异常.");
return FALSE;
}
}
我作了AfxOleInit()的声明,另外也加了
#import "d:\program files\common files\system\ado\msado15.dll" no_namespace
在头文件的类中的public也作了如下声明
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pUserSet;
FieldsPtr m_pFieldsPtr;
FieldPtr m_pFieldPtr;
编译时出现如下错误:
f:\program files\microsoft visual studio\myprojects\test\debug\msado15.tlh(169) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\myprojects\test\debug\msado15.tlh(212) : error C2011: 'DataTypeEnum' : 'enum' type redefinition(类似的还有7个)
这些是什么引起的错误?
F:\Program Files\Microsoft Visual Studio\MyProjects\test\test.cpp(70) : error C2228: left of '.CreateInstance' must have class/struct/union type
F:\Program Files\Microsoft Visual Studio\MyProjects\test\test.cpp(84) : error C2065: 'm_pUserSet' : undeclared identifier(类似的还有10个)
难道在DLL中 _RecordsetPtr m_pUserSet 等一些语句定义无效?