封装一个用ADO访问数据库的DLL,调试出错解决思路
封装一个用ADO访问数据库的DLL,调试出错
各位大侠,小弟把一个ADO访问数据库的程序改成DLL,DLL编译没有问题。但是新建了一个console工程调试的时候出错
下面这个是输出函数:
_declspec(dllexport) int GetInfo(const char* Name, int nCount, COMPANY_INFO *Info)
{
CADORecordset Rs;//定义一个记录集
int Tempindex=0;//用于遍历数组的下标
CString strSqlQuery;
CString tempstr;
if(nCount <0||strlen(Name)> 255)
return -1;
strSqlQuery.Format(_T( "select * from table1 "),Name);
Rs.Open(m_AdoDatabase.GetActiveConnection(),strSqlQuery);//打开记录集
if(nCount==0)
{ //如果nCount为0,则返回记录集中的记录数
while(!Rs.IsEOF())
{
nCount++;
Rs.MoveNext();
}
return nCount;
}
//如果传递的第二个参数不为0,则将查询信息放在数组缓冲中
while(!Rs.IsEOF())
{
Rs.GetFieldValue(0,tempstr);//取列中的值
lpInfo[Tempindex].name=tempstr;
Rs.MoveNext();
if(++Tempindex==nCount)//如果数组缓冲区不够用,返回-2
return -2;
}
// 关闭结果集
Rs.Close();
if(Tempindex==0)//如果找不到名称就返回-3
return -3;
return 0;
}
测试程序如下:
_declspec(dllimport) int GetInfo(const char* Name, int nCount, INFO *Info);
_declspec(dllimport) bool Initfunction();
_declspec(dllimport) bool MyConnectDB();
int main()
{
int tvalue=0;
Initfunction();//就是CoInitialize(NULL)
MyConnectDB();//连接数据库库,打开连接
INFO tempArray[20];
tvalue=GetInfo( "时代 ",20,tempArray);//这里出现问题
return 0;
}
我调试的时候,如果将函数GetInfo的第二个参数设置为0的话,则该函数能够执行,返回记录集中的记录数。但是当大于0的时候就出错了,
错误信息是 "User breakpoint called at 0x7c921230 " 访问数据库的程序没有错误,但是怎么测试的时候就出错了呢?该怎样修改程序呢?
各位大侠,小弟把一个ADO访问数据库的程序改成DLL,DLL编译没有问题。但是新建了一个console工程调试的时候出错
下面这个是输出函数:
_declspec(dllexport) int GetInfo(const char* Name, int nCount, COMPANY_INFO *Info)
{
CADORecordset Rs;//定义一个记录集
int Tempindex=0;//用于遍历数组的下标
CString strSqlQuery;
CString tempstr;
if(nCount <0||strlen(Name)> 255)
return -1;
strSqlQuery.Format(_T( "select * from table1 "),Name);
Rs.Open(m_AdoDatabase.GetActiveConnection(),strSqlQuery);//打开记录集
if(nCount==0)
{ //如果nCount为0,则返回记录集中的记录数
while(!Rs.IsEOF())
{
nCount++;
Rs.MoveNext();
}
return nCount;
}
//如果传递的第二个参数不为0,则将查询信息放在数组缓冲中
while(!Rs.IsEOF())
{
Rs.GetFieldValue(0,tempstr);//取列中的值
lpInfo[Tempindex].name=tempstr;
Rs.MoveNext();
if(++Tempindex==nCount)//如果数组缓冲区不够用,返回-2
return -2;
}
// 关闭结果集
Rs.Close();
if(Tempindex==0)//如果找不到名称就返回-3
return -3;
return 0;
}
测试程序如下:
_declspec(dllimport) int GetInfo(const char* Name, int nCount, INFO *Info);
_declspec(dllimport) bool Initfunction();
_declspec(dllimport) bool MyConnectDB();
int main()
{
int tvalue=0;
Initfunction();//就是CoInitialize(NULL)
MyConnectDB();//连接数据库库,打开连接
INFO tempArray[20];
tvalue=GetInfo( "时代 ",20,tempArray);//这里出现问题
return 0;
}
我调试的时候,如果将函数GetInfo的第二个参数设置为0的话,则该函数能够执行,返回记录集中的记录数。但是当大于0的时候就出错了,
错误信息是 "User breakpoint called at 0x7c921230 " 访问数据库的程序没有错误,但是怎么测试的时候就出错了呢?该怎样修改程序呢?