内存泄漏的问题,大家帮忙看看!

Chimae 2005-10-20 10:59:08
兄弟们帮我看看,内存泄露的问题,谢谢!
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()函数本身,也是一切正常,能够返回值;
...全文
166 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chimae 2005-10-20
  • 打赏
  • 举报
回复
解决了,谢谢大家!就如同“sxzqlzx() ”和“constantine(飘遥的安吉儿) ”所说的,感谢!
Chimae 2005-10-20
  • 打赏
  • 举报
回复
DLL和调用程序都是CBUILDER编的,应该不存在“sxzqlzx() ”说得“AnsiString和Char”的问题吧!
constantine 2005-10-20
  • 打赏
  • 举报
回复
参数跟返回类型一般不要用AnsiString,如果用了你有没有按照dll前那段说明去做,要用ShareMem

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
hy1080 2005-10-20
  • 打赏
  • 举报
回复
是不是没打补丁?
sxzqlzx 2005-10-20
  • 打赏
  • 举报
回复
不要用AnsiString参数类型,用Char
Chimae 2005-10-20
  • 打赏
  • 举报
回复
DLL下载地址:http://www.twsoft.cn/download/software/twsoftsearch.dll
源码直接下载地址: https://pan.quark.cn/s/387d7c8f6289 在使用IE浏览器的过程中,偶尔会出现重置为默认配置操作未能顺利完成的现象。这种情况的发生可能源于多种因素,包括注册表项出现偏差、浏览器附加组件之间存在不兼容、操作系统授权设置不当或受到恶意程序影响等。针对这一挑战,我们可以通过一系列系统性的方法来逐一诊断和纠正。首先需要验证当前用户是否具备管理员级别的操作权限。在执行重置配置的操作时,必须确保IE浏览器是以管理员身份启动的。具体操作方式为,使用鼠标右键单击IE程序图标,并从弹出的菜单中选择“以管理员身份运行”这一选项。其次,应当检查是否存在恶意软件。恶意程序有时会非法修改浏览器的配置信息,从而阻碍重置过程的正常进行。用户可以借助Windows系统自带的Microsoft Safety Scanner进行检测,或者选择安装并使用第三方安全防护软件执行全面的系统扫描。紧接着,需要对浏览器的缓存数据以及Cookies文件进行清理。在IE浏览器界面中,通过访问“工具”菜单并选择“Internet选项”,然后在弹出的设置界面中,切换至“常规”标签页,并执行清除浏览历史记录的操作,此过程应包含Cookies和临时互联网文件。倘若上述步骤均未能解决问题,那么可以考虑禁用或移除那些可能引发冲突的浏览器附加组件。相关操作需要在“工具”菜单下找到并打开“管理加载项”,对可疑的插件进行禁用处理,并在浏览器重新启动后再次尝试执行重置操作。再者,修复IE浏览器相关的注册表配置也是至关重要的环节。注册表编辑器是一个功能强大的系统工具,任何不当的操作都可能导致严重的系统问题,因此在进行修改前必须创建系统还原点作为安全备份。用户可以通过按下“Win+R”组合...
内容概要:本文详细介绍了光伏储能虚拟同步发电机(VSG)并网仿真模型的Simulink实现方法,系统研究了光伏发电与储能系统融合VSG技术并入电网的动态特性与控制策略。通过构建完整的VSG控制模块,模拟其在并网过程中的虚拟惯性响应、频率调节能力和有功无功功率支撑特性,验证了该系统在增强电网稳定性、提升新能源并网适应性方面的有效性。模型全面涵盖光伏出力特性、储能系统充放电管理、VSG有功-无功解耦控制、下垂控制机制以及并网点动态响应等关键环节,并通过多种工况下的仿真分析,评估系统在不同运行条件下的动态性能与鲁棒性。; 适合人群:具备电力系统、新能源发电、自动控制等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制或电力电子系统研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①深入理解光伏储能系统如何通过VSG技术模拟同步发电机的惯性和阻尼特性以支持电网稳定;②掌握虚拟惯量控制、下垂控制等VSG核心控制策略在Simulink中的建模、参数设计与实现方法;③为新型电力系统中新能源并网的动态仿真、稳定性分析及控制策略优化提供可靠的模型基础和技术参考。; 阅读建议:建议结合所提供的仿真模型进行逐步操作与参数调试,重点关注VSG控制环路的结构设计、控制器参数整定及其对系统动态性能的影响,同时可将该模型拓展应用于多机并联、微电网孤岛/并网切换、多能源协同控制等更复杂的系统场景中进行进阶研究。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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