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

Win2K 裡 同一DLL在同一進程內可以存在兩份實例嗎?

尚未結案
DKSoftCHS
一般會員


發表:5
回覆:13
積分:3
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-24 11:28:20 IP:219.130.xxx.xxx 未訂閱
請教各位
我在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-25 00:55:55 IP:219.130.xxx.xxx 未訂閱
不会吧?你确定是相同的吗? 我以前写HOOK API的时候,发现,同一个进程可以存在两个或以上的DLL实例的. 你试试第二个DLL引用时,通过其他DLL间接引用它.
DKSoftCHS
一般會員


發表:5
回覆:13
積分:3
註冊:2004-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-29 09:18:07 IP:218.14.xxx.xxx 未訂閱
同一个进程可以存在两个或以上的DLL实例的应该不会吧, 在98整个系统只存在一份,2K同一进程下只存在一份, 现在我是通过copy dll来实现,不知道有没有好的方法    
引言: 不会吧?你确定是相同的吗? 我以前写HOOK API的时候,发现,同一个进程可以存在两个或以上的DLL实例的. 你试试第二个DLL引用时,通过其他DLL间接引用它.
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-29 19:13:24 IP:203.67.xxx.xxx 未訂閱
引言: Win2K 裡 同一DLL在同一進程內可以存在兩份實例嗎?
以Win32的DLL設計觀念上來說,這樣的用法應該是違例的狀況, 在Win32中,每個程式都將它本身所用到的資源,這包含DLL檔都是 放置在獨立的4GB記憶體區塊中,互不干擾;我想這是為了避免像在 16bit 的Windows系統中,因為所有程式共用一份所產生的邊際效應 而做的改變.我所知道的是有些為了某些程式上的需要,想讓多個程 式間共用某些記憶體區塊而透過程式的技巧來達到分享的目的; 如你程式碼一般的用法,何不讓你的函數帶有參數,在依據參數值來 決定回傳值?這樣應較為合理.
系統時間:2024-05-14 23:29:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!