在VB宣告呼叫動態庫:
Private Declare Function unionUnPacked Lib "C:\ap\dll\DMexp.dll" (ByVal rxData As Long, _
ByVal rxLen As Long, _
ByVal pData As Long, _
ByVal pLen As Long) As Byte
動態庫介面的頭檔案:
unsigned char unionUnPacked(unsigned char* rxData, unsigned char rxLen, unsigned char* pData, unsigned char* pLen);
當我在VB中的代碼使用以下的代碼時,程式就例外退出了,請各位大神幫忙分析,是不是我在VB呼叫動態庫的宣告回傳資料型別為Byte導致的?還是其他原因?
strRes = unionUnPacked(VarPtr(bytStr(0)), lngIndex, VarPtr(tempbytStr(0)), pLenth)
uj5u.com熱心網友回復:
帶星號的引數,在宣告時應該宣告成ByRef然后呼叫時不用加VarPtr ,直接用陣列的第一個元素,比如 bytStr(0)
uj5u.com熱心網友回復:
unsigned char unionUnPacked(unsigned char* rxData, unsigned char rxLen, unsigned char* pData, unsigned char* pLen);Private Declare Function unionUnPacked Lib "C:\ap\dll\DMexp.dll" (ByRef rxData As Byte, _
ByVal rxLen As Byte, _
ByRef pData As Byte, _
ByRef pLen As Byte) As Byte
Dim bytRetAs Byte, bytRFData(255) As Byte, bytRFLen As Byte, bytPData(255) As Byte, bytPLen As Byte
bytRet = unionUnPacked(bytRFData(0), bytRFLen, bytPData(0), bytPLen)
uj5u.com熱心網友回復:
改了試了一下,報vb.6應用程式錯誤,0x0faf7899指令參考的0x00000000記憶體。該記憶體不能為read。
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熱心網友回復:
地址不對。。。。,不知道函式名什么的對不對,是不是stdcall的C函式。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/69910.html
標籤:VB基礎類
下一篇:另類的注冊表函式用法
