台灣最大程式設計社群網站
線上人數
1943
 
會員總數:240902
討論主題:186660
歡迎您免費加入會員
討論區列表 >> VB.NET >> 有辦法把函數的位置傳送使用嗎?
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有辦法把函數的位置傳送使用嗎?
價值 : 50 QP  點閱數:115 回應數:2

樓主

Zaser
門外漢
0 1
16 1
發送站內信

各位先進好

小弟想問一個問題,不知道有沒有辦法達成這樣的功能

因為小弟在寫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




搜尋相關Tags的文章: [ 委派 ] , [ 函數 ] , [ 傳址 ] ,
本篇文章發表於2017-10-12 13:36
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Ader Chen
檢舉此回應
一種方式是用事件, 個人比較習慣這種方式,
另一種方式是委派, 不過不是您寫的那樣,
簡單 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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.