DLL中使用ADO出现了编译问题

xwchena 2001-07-05 08:25:47
我想在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 等一些语句定义无效?

...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwchena 2001-07-07
  • 打赏
  • 举报
回复
我没有包含任何ado头文件,在exe文件中引入msado15.dll编译没出问题,但是在dll中就有,
找了半天还是不明白和什么文件发生了冲突。
xwchena 2001-07-07
  • 打赏
  • 举报
回复
改完就可以了,为什么会出现这种错误?
zhq2000 2001-07-07
  • 打赏
  • 举报
回复
可能你包含了ADO的头文件,如adoxxxx.h。
当你使用 #import时,这些头文件是不需要的
zhq2000 2001-07-07
  • 打赏
  • 举报
回复
它们与你现有的名字发生冲突!
原因请分析你的代码!
zhq2000 2001-07-06
  • 打赏
  • 举报
回复
把这些个 Enum 也改名吧,继续rename :
rename("EOF" , "adoEOF") , rename("LockTypeEnum" , "adoLockTypeEnum) .....
xwchena 2001-07-06
  • 打赏
  • 举报
回复
我也加了rename("EOF","adoEOF")
我建了一个MFC的DLL,就加入了#import那句,别的什么都没做,编译就出现下面错误:
f:\program files\microsoft visual studio\call\debug\msado15.tlh(143) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\call\debug\msado15.tlh(184) : error C2011: 'DataTypeEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\call\debug\msado15.tlh(228) : error C2011: 'FieldAttributeEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\call\debug\msado15.tlh(245) : error C2011: 'EditModeEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\call\debug\msado15.tlh(253) : error C2011: 'RecordStatusEnum' : 'enum' type redefinition
f:\program files\microsoft visual studio\call\debug\msado15.tlh(432) : error C2011: 'ParameterDirectionEnum' : 'enum' type redefinition
Error executing cl.exe.

call.dll - 6 error(s), 0 warning(s)
zhq2000 2001-07-06
  • 打赏
  • 举报
回复

#import "d:\program files\common files\system\ado\msado15.dll" no_namespace , rename("EOF" , "adoEOF")

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧