開發DLL中,可以使用 explicit load 的方式使用其他的dll function嗎 |
答題得分者是:aftcast
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
既然你想用explicit load的方式,就應該不要在程式一開始的時候就load,無論是component或是一般的程式。
否則explicit的優勢就沒了,不是嗎? 結論: 必要用之前一刻再load即可。換句話說,某些時候可能完全都沒load到,程式就結束了,因為沒有使用到dll裡的一些功能時。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你說的這個問題太神奇了…
第一次與第二次都是一樣的條件下? 或是連著很快速的第一次、第二次? 或是該function裡的參數與記憶體的配置有關? 即要先配好之類的? ===================引 用 ychch0819 文 章=================== 第一次呼叫 A Funcion所得到的結果是錯的…但是第二次呼叫後就都正常了…
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
因為還在測試…所以我選最簡單,單純的函式來測驗…
所以 1. 函式是不需要參數的…只是單純的傳回一個值… 2. 不需要另外呼叫另一個函式… ps:我的測式方式是繼續使用原本靜態的方式呼叫此函式…所以並未把lib從專案移除… 先呼叫一次動態連結得到的函式 指-->印出結果… 再呼叫一次靜態的函式-->印出結果… 來比較 不知道這樣會不會有問題!? ===================引 用 aftcast 文 章=================== 1/ 該函式的參數是什麼? 2/ 在你可以呼叫該函式前,是否要先呼叫另一個函式? |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
af大…
今天把lib從元件專案移除,單純的只用Function Pointer來呼叫函式… 開另一個專案使用此元件來測試…結果反而是沒有一次的值是正確的… 之後開另一個專案…也是用動態load 此 dll Function,沒有透過元件,直接呼叫…結果卻是正確的… 所以有點在懷疑是不是component就無法使用explicit load...@@ ===================引 用 aftcast 文 章=================== 理論上會有問題。我覺得這樣的測式沒有必要性。 若要使用lib來處理就單純用lib,若要動態來load就該動態load。除非二個是不同的東西。若lib與dll是同一個,我覺得取得的指標位址會出亂子! 建議選其一來測! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
謝謝你的實作分享,再請教一下,是否可以把load lib 的動作不要放在 建構式之類的時候,而改在使用的前幾行才load,然後再試一下?
===================引 用 ychch0819 文 章=================== 之後開另一個專案…也是用動態load 此 dll Function,沒有透過元件,直接呼叫…結果卻是正確的… 所以有點在懷疑是不是component就無法使用explicit load...@@
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
此外,試著用 SafeLoadLibrary這個函式來loadlibaray,不用windows裡的loadlibrary這個api。
delphi的例子 HInst := SafeLoadLibrary (DllName); if HInst > 0 then try FPointer := GetProcAddress (.......)
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
感謝af大的指導…
剛剛在測試後,已發現應該是lib/dll的問題造成的… 所以證明af大是正確的… 在元件中也可以使用動態連結dll... ===================引 用 aftcast 文 章=================== 此外,試著用 SafeLoadLibrary這個函式來loadlibaray,不用windows裡的loadlibrary這個api。 delphi的例子 HInst := SafeLoadLibrary (DllName); if HInst > 0 then try FPointer := GetProcAddress (.......) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |