呼叫dll檔案,遇見有回呼函式的,新手不知道該怎么寫宣告了,大神來幫個忙

uj5u.com熱心網友回復:
不要做A語言代碼修改為B語言代碼的無用功。也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml
共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……
“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!
uj5u.com熱心網友回復:
樓上趙四復讀機的這種回復,看著就惡心 !!!!!
' 第1個: API函式宣告
Private Declare Function OpenSDK_AllocSession Lib "XXX.dll" (ByVal pHandle As Long, _
ByRef pUser As Any, _
ByRef pSession As Long, _
ByRef iSessionLen As Long, _
Optional ByVal bSync As Boolean = False, _
Optional ByVal iTimeOut As Long = &HEA60&) As Long
' 引數說明:
' pHandle 你的“回呼函式”地址,使用時傳入: AddressOf OpenSDK_MessageHandler
' pUser 你要向“回呼函式”傳遞的資訊資料,可以是任意的(按你的需要定義)“自定義型別”,
' 也可以是VB6中“標準”的資料型別。如果不需要傳資料,可傳遞 ByVal 0& 。
' pSession 指向一個“字串資料”,估計是ANSI格式編碼的,用CopyMemory( )把資料拷貝到一個字
' 節陣列中,再用 StrConv( ) 函式轉換成UTF16編碼字串就行了。
' iSessionLen 從上一個引數(pSession)指向的記憶體地址,字符資料有多少位元組。
' bSync 略
' iTimeOut “同步操作”的“超時”引數,時間單位是毫秒。默認值為6萬毫秒(1分鐘)。
' 第2個: 你自己要實作的“回呼函式”,必須寫在某“標準模塊”中
Public Sub OpenSDK_MessageHandler(ByVal szSessionId As Long, ByVal iMsgType As Long, _
ByVal iErrorCode As Long, ByVal pMessageInfo As Long, _
ByVal pUser As Long)
' 引數說明:
' szSessionId 見上面的 pSession ,只是這兒沒有“資料長度”資料,可按 SessionId格式,選取一個
' “最大長度”的位元組陣列,用CopyMemory( )把資料拷貝出來,轉換成字串后,
' 找“vbNullChar”的位置,從那兒截斷。
' pUser VB6中“自己的函式”引數型別不能是 Any 。如果是Long型別的一個值,可以直接使用,
' 如果是其它型別(包括自定義資料型別),可定義一個相應型別的變數,然后用
' CopyMemory( )把pUser指向的資料拷貝到相應的變數中,拷貝長度就是變數資料
' 型別的位元組數。如果是“自定義型別”、并且成員中包含動態陣列、字串型別
' 的成員,在使用后最好用ZeroMemory() 把這個變數“清空”,還有:對字串成
' 員最好不要賦以新值、動態陣列不要重定義大小(元素不是字串時可改變值)。
' 如果“不需要”,直接忽略這個引數就行了。
'
' 這個函式(回呼程序)的其它引數沒必要再多說了。
'
End Sub
uj5u.com熱心網友回復:
越惡心的解決方案,沒準越靈。參考《阿波羅13號》
uj5u.com熱心網友回復:
那按照你這狗P邏輯:作業系統中的dll幾乎全是C++開發的,那么眾多的計算機語言,都沒存在的價值了!只能用C++開發軟體?
這VB6也不能用來開發什么具體的應用了,只能用來搞個“計算器”什么的,做點加減乘除就行了?

uj5u.com熱心網友回復:
總有一天,Chen8013會掉到A語言B語言的坑里。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/59467.html
標籤:API
