why!why!why!!!!!
我在DLL文件中写了如下代码访问ACCESS数据库:
#include "StdAfx.h"
#include "do.h" // 一些变量申明的头文件,一定正确,不必理会这里
extern "C" _declspec(dllexport)
char * ShowAllNames() // 读数据库中所有(库中只有3个学生)学生名字
{
names = new char [MAX]; // MAX = 255;
strcpy(names, "");
if(!m_pSet.IsOpen())
{
if(!m_pSet.Open()) return NULL;
}
if(m_pSet.IsBOF()) return NULL;
m_pSet.MoveFirst();
while(!m_pSet.IsEOF())
{
strcat(names, m_pSet.m_name);
strcat(names, " ");
m_pSet.MoveNext();
}
if(m_pSet.IsOpen()) m_pSet.Close();
return names;
}
在exe文件中访问这个DLL:
char * name;
typedef char * (SQRTPROC)();
SQRTPROC * pFunction;
VERIFY(hInstance = LoadLibrary
("F:\\exe_dll\\exe_dll\\dll\\Debug\\loaddb1.dll"));
VERIFY(pFunction = (SQRTPROC *)GetProcAddress
(hInstance,"ShowAllNames"));
name = (* pFunction)();
m_Edit.SetWindowText(name);
}
///////////////////////////////////////
exe执行时一切正常,m_Edit中也显示了数据库中的内容;
但一当关闭时就弹出“非法操作”框,写的是:
"0x77f7a22a引用的0x013a074f内存,该内存不能为'read',要终止程序,请按'确
定'
"
Why ?? 谢谢各位先!