最近我在做一個DLL,發現可能是記憶體泄漏,但找不到原因。請幫忙分析。RAD studio 2010 win7 64位。
新建一個Dll,就是一個Form,內放一個定時器。然后定時器的事件代碼如下
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled=0;
Timer1->Interval=1000;
Timer1->Enabled=1;
}
下面是入口部分
TForm1 *Form1;
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport)void __stdcall Start(void)
{
Form1 = new TForm1(NULL);
}
extern "C" __declspec(dllexport)void __stdcall Stop(void)
{
delete Form1 ;
}
編譯通過。
然后新建一個BCB工程,使用DLL。也是一個Form,放兩個按鈕。
TForm1 *Form1;
AnsiString str = ExtractFilePath(Application->ExeName) + "Project1.dll";
HINSTANCE hdll;
HRESULT __stdcall(*Start)(void);
HRESULT __stdcall(*Stop)(void);
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Start();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hdll = ::LoadLibrary(str.c_str()); // 動態加載
(FARPROC&)Start = GetProcAddress(hdll, "Start");
(FARPROC&)Stop = GetProcAddress(hdll, "Stop");
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Stop();
}
運行時,點擊按鈕1,資源管理器里看該行程,占用記憶體,在上升。
dLL代碼改成如下,就正常了,記憶體增加了。
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// Timer1->Enabled=0;
Timer1->Interval=1000;
//Timer1->Enabled=1;
}
請問什么原因?
uj5u.com熱心網友回復:
不好意思寫錯了“dLL代碼改成如下,就正常了,記憶體不增加了“
uj5u.com熱心網友回復:
自問自答啊?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71214.html
標籤:VCL組件使用和開發
