線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2103
推到 Plurk!
推到 Facebook!

DLL引用主程式裡的副程式

答題得分者是:aftcast
Brady_Chen
一般會員


發表:6
回覆:14
積分:9
註冊:2013-02-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-04-11 16:02:19 IP:218.210.xxx.xxx 未訂閱
 我又來麻煩各位前輩了

我寫了一個DLL檔將一些外加的功能加入主程式中
目前遇到一個不知道怎麼解決的問題

我有些副程式是寫在主程式中
這些副程式會給很多地方使用
因此無法將其寫在DLL中
( 應該說是牽連過大 牽一毛而動全身)
所以希望能夠在DLL中CALL主程式裡的副程式
請問有辦法嗎
我應該傳甚麼東西進去給他CALL??

百思不得其解
故上來請教各位前輩
希望能夠撥空指導
感激不盡!! 謝謝!!
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-04-11 17:19:28 IP:114.32.xxx.xxx 訂閱
我初步的構思:

在dll裡建立一個叫 GetExFunctions的函式。它的實作是接收到自主程式的一組「函式指」陣列(或指標),然後考備至dll的全域的「函式指」陣列(或指標)。
你dll裡其他的函式的實無則是呼叫那個全域的函式指標變數(的某一個),這樣就等同呼叫了exe的應用的那個副函式了。

在exe換入dll後,立刻把exe自己的一些副程式設入函式指標變數陣列,然後當作參數送給GetExFunctions( function pointer array);

以上的實作需要對函式指標甚至方法指標或是__closure有了解。難度高! 必竟大家都是主程式叫dll,反過來比較少!

可參考一下基本要學的資料:
http://bcbjournal.org/articles/vol4/0007/Understanding_function_pointers.htm?PHPSESSID=373e76ed98da3801bcf4e3e551679672





===================引 用 Brady_Chen 文 章===================
我又來麻煩各位前輩了

我寫了一個DLL檔將一些外加的功能加入主程式中
目前遇到一個不知道怎麼解決的問題

我有些副程式是寫在主程式中
這些副程式會給很多地方使用
因此無法將其寫在DLL中
( 應該說是牽連過大 牽一毛而動全身)
所以希望能夠在DLL中CALL主程式裡的副程式
請問有辦法嗎
我應該傳甚麼東西進去給他CALL??

百思不得其解
故上來請教各位前輩
希望能夠撥空指導
感激不盡!! 謝謝!!
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-04-11 21:08:27 IP:219.84.xxx.xxx 訂閱
蕭大俠出手果然又是絕世武功葵花寶典的番外篇.......


高手們提供了高手的方法....我們這些不聰明的人.....還是來提供點蠻幹硬拗的手法....


寫一個 Object....把你要的Function 寫在這個 Object 的 Method中....當然...這個Object 要另存在一個pas 檔中。

然後...在主程式去 use 這個 pas ....並且去 new 一個 Instance 出來.....就是宣告物件變數並 Create啦....


然後呢....在DLL 實作時.....也use這個 pas....並宣告一個 這個Object 的物件變數.....不用建立 Instance....

接下來只要在主程式呼叫 DLL 時.....把主程式Create好的Instance call by refrence 傳至 DLL 中,在DLL 中用宣告好的物件變數來承接.....

如此就能在DLL中使用這個主程式中的 Object 的 Method(Function)來做事了。

上述的賤招....只要稍為有物件導向觀念的人.....要實作出來並不困難......


以上說明,謝謝



===================引 用 aftcast 文 章===================
我初步的構思:

在dll裡建立一個叫 GetExFunctions的函式。它的實作是接收到自主程式的一組「函式指」陣列(或指標),然後考備至dll的全域的「函式指」陣列(或指標)。
你dll裡其他的函式的實無則是呼叫那個全域的函式指標變數(的某一個),這樣就等同呼叫了exe的應用的那個副函式了。

在exe換入dll後,立刻把exe自己的一些副程式設入函式指標變數陣列,然後當作參數送給GetExFunctions( function pointer array);

以上的實作需要對函式指標甚至方法指標或是__closure有了解。難度高! 必竟大家都是主程式叫dll,反過來比較少!

可參考一下基本要學的資料:
http://bcbjournal.org/articles/vol4/0007/Understanding_function_pointers.htm?PHPSESSID=373e76ed98da3801bcf4e3e551679672





===================引 用 Brady_Chen 文 章===================
我又來麻煩各位前輩了

我寫了一個DLL檔將一些外加的功能加入主程式中
目前遇到一個不知道怎麼解決的問題

我有些副程式是寫在主程式中
這些副程式會給很多地方使用
因此無法將其寫在DLL中
( 應該說是牽連過大 牽一毛而動全身)
所以希望能夠在DLL中CALL主程式裡的副程式
請問有辦法嗎
我應該傳甚麼東西進去給他CALL??

百思不得其解
故上來請教各位前輩
希望能夠撥空指導
感激不盡!! 謝謝!!
編輯記錄
carstyc 重新編輯於 2013-04-11 21:18:21, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-04-11 21:15:40 IP:219.84.xxx.xxx 訂閱
補充一下....我粉久粉久以前.....就是用這種方法.....把 MDI Form 中的 DataModule 傳給 DLL 中的 DataModule 

這樣的作法使得我不用在每個 DLL 中去建立DB的Connection...用完還要記得將Connection Close...

連DataModule 都可以整個傳給 DLL 中來使用.....一個小小主程式的 Function....絕對難不倒我們滴.....



===================引 用 carstyc 文 章===================
蕭大俠出手果然又是絕世武功葵花寶典的番外篇.......


高手們提供了高手的方法....我們這些不聰明的人.....還是來提供點蠻幹硬拗的手法....


寫一個 Object....把你要的Function 寫在這個 Object 的 Method中....當然...這個Object 要另存在一個pas 檔中。

然後...在主程式去 use 這個 pas ....並且去 new 一個 Instance 出來.....就是宣告物件變數並 Create啦....


然後呢....在DLL 實作時.....也use這個 pas....並宣告一個 這個Object 的物件變數.....不用建立 Instance....

接下來只要在主程式呼叫 DLL 時.....把主程式Create好的Instance call by refrence 傳至 DLL 中,在DLL 中用宣靠好的物件變數來承接.....

如此就能在DLL中使用這個主程式中的 Object 的 Method(Function)來做事了。

上述的賤招....只要稍為有物件導向觀念的人.....要實作出來並不困難......


以上說明,謝謝



===================引 用 aftcast 文 章===================
我初步的構思:

在dll裡建立一個叫 GetExFunctions的函式。它的實作是接收到自主程式的一組「函式指」陣列(或指標),然後考備至dll的全域的「函式指」陣列(或指標)。
你dll裡其他的函式的實無則是呼叫那個全域的函式指標變數(的某一個),這樣就等同呼叫了exe的應用的那個副函式了。

在exe換入dll後,立刻把exe自己的一些副程式設入函式指標變數陣列,然後當作參數送給GetExFunctions( function pointer array);

以上的實作需要對函式指標甚至方法指標或是__closure有了解。難度高! 必竟大家都是主程式叫dll,反過來比較少!

可參考一下基本要學的資料:
http://bcbjournal.org/articles/vol4/0007/Understanding_function_pointers.htm?PHPSESSID=373e76ed98da3801bcf4e3e551679672





===================引 用 Brady_Chen 文 章===================
我又來麻煩各位前輩了

我寫了一個DLL檔將一些外加的功能加入主程式中
目前遇到一個不知道怎麼解決的問題

我有些副程式是寫在主程式中
這些副程式會給很多地方使用
因此無法將其寫在DLL中
( 應該說是牽連過大 牽一毛而動全身)
所以希望能夠在DLL中CALL主程式裡的副程式
請問有辦法嗎
我應該傳甚麼東西進去給他CALL??

百思不得其解
故上來請教各位前輩
希望能夠撥空指導
感激不盡!! 謝謝!!
系統時間:2017-10-22 1:33:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!