全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1076
推到 Plurk!
推到 Facebook!

dll & codeguard

尚未結案
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-23 16:28:32 IP:211.23.xxx.xxx 未訂閱
請問,我在打開 Codeguard時發現,呼叫dll後,再將程式關閉會出現以下圖形的系統錯誤,就算是在簡單的dll (顯示一個form而已再關閉)也會,請教前輩我是有用做的地方? 程式碼部分 AnsiString AppDir;  AppDir = CompilePath + "\\TestDll.dll";  if (access(AppDir.c_str(),0) == 0)   dd = LoadLibrary(AppDir.c_str());  else  {   ShowMessage(MsgList->Strings[452]);//"找不到相關的 dll 檔案!!");   return;  }  if (dd)  {   (FARPROC&)Test = GetProcAddress(dd,"CreateHSC_PID");   (FARPROC&)DelTest = GetProcAddress(dd,"DestroyHSC_PID");   Test(MachineType);   DelTest();  } //     FreeLibrary(dd);    錯誤圖形: 我是用bcb6.0,5.0的就不會發生。難道又是borland的bug?
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-23 17:13:25 IP:211.76.xxx.xxx 未訂閱
jason_cyl329你好: 會不會是在TestDll.dll中配置的記憶體沒有釋放?請你檢查看看~
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-23 17:52:44 IP:211.23.xxx.xxx 未訂閱
pwipwi你好,我確定有釋放,如果你是用6.0的,可以幫我試試嗎? dll內的程式很簡單, Form2 = new TForm2(NULL); Form2->ShowModal(); delete Form2; 就只有這幾列程式而已!! 謝謝指教!!
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-24 05:57:12 IP:211.76.xxx.xxx 未訂閱
引言: pwipwi你好,我確定有釋放,如果你是用6.0的,可以幫我試試嗎? dll內的程式很簡單, Form2 = new TForm2(NULL); Form2->ShowModal(); delete Form2; 就只有這幾列程式而已!! 謝謝指教!!
以上的Code是沒有問題的。leak的地方可能是在ShowModal時所執行的碼,而且TForm的大小至少不止48,和報告中的不合。 另外報告中已經告訴你leak的記憶體是在0x02639422這個地方配置的,用記憶體解讀的相關程式,可以查出是在那個dll或bpl,也可以查出是在那個函式中。不然直接點報告中的位置,也會顯示組合語言的source code。應該就可以看出是那裡出了問題。
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-28 20:47:12 IP:211.23.xxx.xxx 未訂閱
前輩,請問這要如何查,我現在用最簡單的Form都會有問題,前輩可以直接開一個專案,在Onclick時做呼叫dll的動作,這個dll只做new form ,show form,delete form的動作,不要忘記主要的project 之codeguard要打開,就會產生錯誤,敬請指教,拜託了!!
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-29 01:28:10 IP:211.76.xxx.xxx 未訂閱
我測式的結果是沒有問題的,測試碼如下。你可以比照一下。Form3只有一個Button。  
//------------------------Dll
//Unit1.h
extern "C"
{
   __declspec(dllexport) void MakeForm(void);
}
//Unit1.cpp
void MakeForm(void)
{
    TForm3* form = new TForm3(0);
    form->ShowModal();
    delete form;
}    #pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
//---------------------------------------------------------------------------
         //------------------------主程式
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
typedef void (*MakeForm)(void);    void __fastcall TForm1::Button1Click(TObject *Sender)
{
   HINSTANCE dll;
   MakeForm makeForm;       dll=LoadLibrary("Project1.dll");
   if(dll!=NULL)
   {
      makeForm=(MakeForm)GetProcAddress(dll, "_MakeForm");
      if(makeForm!=NULL)
      {
         makeForm();
      }
      else
      {
         ShowMessage("Error GetProcAddress");
      }
      FreeLibrary(dll);
   }
   else
   {
      ShowMessage("Error LoadLibrary");
   }
}     
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-29 09:56:02 IP:211.23.xxx.xxx 未訂閱
請問你是用6.0版的嗎,codeguard是否有開啟, dll部分,在 makeform前面的參數沒有加__stdcall應該是不能呼叫到才對, //------------------------Dll //Unit1.h extern "C" { __declspec(dllexport) void MakeForm(void); } //Unit1.cpp void MakeForm(void) { TForm3* form = new TForm3(0); form->ShowModal(); delete form; }
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-04 14:41:38 IP:211.76.xxx.xxx 未訂閱
引言: 請問你是用6.0版的嗎,codeguard是否有開啟, dll部分,在 makeform前面的參數沒有加__stdcall應該是不能呼叫到才對,
jason_cyl329你好: 不好意思,前幾天都漏看這篇文章。 我是用bcb6,有update過。我也確定codeguard有開,(我還試了一下他的偵錯功能)。另外我呼叫後,有正確的顯示Form3。確定是有呼叫到。 不知道你的問題是否還尚未解決?
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-04 15:26:02 IP:211.23.xxx.xxx 未訂閱
pwipwi你好,感謝你的幫忙,還是會發生,請問你有更新,視更新哪些檔案呢?
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-05 01:10:45 IP:211.76.xxx.xxx 未訂閱
我有上Borland的官方網站,下載BCB6的patch。應該只有這個吧~
系統時間:2024-07-04 6:51:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!