Win2K 裡 同一DLL在同一進程內可以存在兩份實例嗎? |
尚未結案
|
DKSoftCHS
一般會員 發表:5 回覆:13 積分:3 註冊:2004-07-24 發送簡訊給我 |
請教各位
我在DLL(Proj.DLL)裡定義一個全局變量 var vData:WideString; 主程序中 procedure TForm1.BtnLoadFirstClick(Sender: TObject); begin fstHandle := LoadLibrary('ProjDLL.dll'); SecHandle := LoadLibrary('ProjDLL.dll'); end; 下面這兩個函數得到的值是一樣的。可不可以讓他們得到的值互不干擾呢? procedure TForm1.BtnFirstGetDataClick(Sender: TObject); var InvokeFunc: function(): WideString; begin @InvokeFunc := GetProcAddress(fstHandle, pchar('GetData')); if @InvokeFunc <> nil then begin EdGetData1.Text := InvokeFunc(); end; end; procedure TForm1.BtnSecondGetDataClick(Sender: TObject); var InvokeFunc: function(): WideString; begin @InvokeFunc := GetProcAddress(SecHandle, pchar('GetData')); if @InvokeFunc <> nil then begin EdGetData2.Text := InvokeFunc(); end; end; 不知道我說的清不清楚 |
dg822
一般會員 發表:14 回覆:38 積分:10 註冊:2004-12-16 發送簡訊給我 |
|
DKSoftCHS
一般會員 發表:5 回覆:13 積分:3 註冊:2004-07-24 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
引言: Win2K 裡 同一DLL在同一進程內可以存在兩份實例嗎?以Win32的DLL設計觀念上來說,這樣的用法應該是違例的狀況, 在Win32中,每個程式都將它本身所用到的資源,這包含DLL檔都是 放置在獨立的4GB記憶體區塊中,互不干擾;我想這是為了避免像在 16bit 的Windows系統中,因為所有程式共用一份所產生的邊際效應 而做的改變.我所知道的是有些為了某些程式上的需要,想讓多個程 式間共用某些記憶體區塊而透過程式的技巧來達到分享的目的; 如你程式碼一般的用法,何不讓你的函數帶有參數,在依據參數值來 決定回傳值?這樣應較為合理. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |