内存泄漏的问题,大家帮忙看看!
兄弟们帮我看看,内存泄露的问题,谢谢!
DLL:
extern "C" __declspec(dllexport) AnsiString __stdcall GetCondition(bool bVisiable,
AnsiString sCaption, TADOQuery* adoQuery);
AnsiString __stdcall GetCondition(bool bVisiable, AnsiString sCaption, TADOQuery* adoQuery)
{
AnsiString sTemp = "";
if (!adoQuery->Active)
return sTemp;
TfrmSearchCondtion *frmMain = new TfrmSearchCondtion(NULL);
frmMain->Caption = sCaption + "自定义查询条件";
frmMain->ADOQuery1 = adoQuery;
frmMain->LoadData(bVisiable);
if (frmMain->ShowModal() != mrOk)
{
delete frmMain;
return sTemp;
}
sTemp = frmMain->GetSQL();
if (sTemp.SubString(1, 5) == " AND ")
sTemp = sTemp.SubString(6, sTemp.Length() - 5);
if (sTemp.SubString(1, 4) == " OR ")
sTemp = sTemp.SubString(5, sTemp.Length() - 4);
delete frmMain;
return sTemp;
}
调用:
typedef AnsiString (GetSQL)(bool, AnsiString, TADOQuery*);
extern "C" __declspec(dllimport) AnsiString __stdcall GetCondition(bool bVisiable,
AnsiString sCaption, TADOQuery* adoQuery);
HINSTANCE nDLL;
GetSQL *theValue;
nDLL = LoadLibrary("TWSOFTSEARCH.dll");
if(nDLL != NULL)
{
theValue = (GetSQL*)GetProcAddress(nDLL, "GetCondition");
if(theValue != NULL)
Memo1->Text = (*theValue)(true, Caption, ADOQuery1);
}
theValue = NULL;
FreeLibrary(nDLL);
调用应该是没有问题的,在打开的DLL窗体里,点击“取消”按钮一切正常,点击“确定”按钮,注释掉这句话sTemp = frmMain->GetSQL();也是一切ok,就是这句话出现内存泄漏的问题,想不出问题出在哪里,程序里只执行GetSQL()函数本身,也是一切正常,能够返回值;