![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 Zaser ![]()
![]() |
小弟想問一個問題,不知道有沒有辦法達成這樣的功能 因為小弟在寫DLL檔案,希望做到一個功能是 我的DLL檔案裡面的函式可以呼叫客戶所傳送給我需要執行的函式 因為我在DLL有一個函式是定時間會去判斷RS232是不是有資料 如果有資料的話 就做對應的動作 而這個對應的動作是客戶自己決定要做什麼動作 ,也就是一個寫好的函數 所以我DLL必須要去呼叫那個客戶寫好的函式 請問這樣的做法有辦法達到嗎? 我原本是這樣想的 客戶將他的函式名稱 傳送到一個全域變數 然後我再用委派方式 將這個函式給委派到我薪建立的名稱上 然後再去執行這個新建立的名稱 這邊是客戶寫的------------------------------------------------------------------------------------------------------------------------------ Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' Dll.xxxxxxxxxxx = "ASDFREWQ" '將函數名稱丟到 xxxxxxxxxxx字串裡面 End Sub Private Sub ASDFREWQ() Dim a as integer a+=1 End Sub ------------------------------------------------------------------------------------------------------------------------------------------------------ 這是Dll檔裡面的部分--------------------------------------------------------------------------------------------------------------------------------------------------- Public Class Form1 Public Delegate Sub Test() Dim xxxxxxxxxxx as string Private Sub Recent_Data_Erro() if xxxxxxxxxxx<>"" then Dim SH As New Test(AddressOf xxxxxxxxxxx.ToString) SH.Invoke() end if End Sub End Class ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 不過想當然是無法達成XDD |
別忘捐VP感謝幫助你的人 | 新手會員瞧一瞧 |
1樓 |
一種方式是用事件, 個人比較習慣這種方式,
另一種方式是委派, 不過不是您寫的那樣, 簡單 demo 供參考:
本篇文章回覆於2017-10-12 19:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
Zaser ![]() |
疑 我第一次看到Action 我等等查一下資料
我目前是這樣做的 在Dll檔案先製造一個委派 Dim SH As New Test(AddressOf xxxxxxxxxxx.ToString) 然後在客戶的主程式FormLoad 時候 也製造一個委派 Dim aa As New ExliteMachineControl.Function1.Hello(AddressOf ASDFREWQ) 然後把 客戶這邊的委派指向正確的函式後 再把DLL裡面的委派(SH) = 客戶這邊的委派(aa) 結果就成功呼叫了 指示當然這樣跨執行緒的話 要執行一些工具的設定 當然就要做一些跨執行緒的前置作業了
本篇文章回覆於2017-10-13 16:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |