vb開發中字元串傳參出現『口』符?
使用vb 6.0封裝一個delphi寫的動態鏈接庫,使用老馬的vb函數添加大師生成標準的動態鏈接庫,在函數內部調取delphi dll時候值沒問題(彈窗輸出),在使用vb寫的demo調取封裝後的dll出現了圖中的情況,求解。
沒細看代碼,圖片截圖實在太難看清。
但是我猜可能是Unicode和ANSI的問題?
看看Windows API版本是W還是A,也就是Unicode還是ANSI其他非win API也需要仔細考慮字元串編碼。-----4月13日割-----有人 @楊興國 問到了我Windows API編碼的問題。在此以CreateWindowEx為例說明一下。
在C/C++系統中,CreateWindowEx是宏,定義於WinUser.h中。它會根據工程實際定義的字元串格式(也是個宏,條件編譯),會替換成CreateWindowExW或CreateWindowExA,W是Unicode的後綴(寬字元),A是ANSI的後綴。對於VB6(古典的VB),可以顯式調用W版本或A版本,也可以在設置中調整。對於http://VB.NET及其他.NET家族語言,建議在工程設置中調整。對於未知的dll,可以利用相關dll/exe/二進位分析軟體查看它調用的字元串版本從而推斷實際需要的字元串格式。對於自行編寫的跨語言/不同工程的靜/動態鏈接庫,可以具體設定工程選項。
建議非老司機在整個軟體(「解決方案」)內,字元串格式保持一致。在此僅作綜述,具體操作及細節請查閱相關語言資料。補圖:vb封裝dll代碼
----------------------------------------------------------------------------------------------------------------------
Delphi 聲明代碼:
function readCard1(icdev: Integer; var cardNo: pansichar; var customeNo: pansichar;
var orderdate: pansichar; var orderAmount: Integer; var orders: Integer;
var orderTotal: Integer; var fgs: pansichar; var glz: pansichar;
var ControllerNo: pansichar; var NodeNo: pansichar): integer; stdcall;
------------------------------------------------------------------------------------------------------------------------
2017年4月13日
參照 消失的苦貓 的答案,抽了個時間在網上進行了相關資料的查找,最終參照《VB6.0中Unicode編碼問題的靈活處理及妙用》一文的說明,進行了相關的測試。
按照文中敘述,使用了StrConv函數進行了字元串的轉換,替代了原先固定字元的替換解決辦法。部分代碼如下:
Dim ret As Integer
Dim CardNo As String
Dim customeNo As String
Dim orderDate As String
Dim orderAmount As Long
Dim orders As Integer
Dim orderTotal As Long
Dim fgs As String
Dim glz As String
Dim ControllerNo As String
Dim NodeNo As Integer
ret = readCard(icdev, CardNo, customeNo, orderDate, orderAmount, orders, orderTotal, fgs, glz, ControllerNo, NodeNo)
CardNo = StrConv(CardNo, vbFromUnicode)
CardNo = Replace(CardNo, Chr(0), "")
測試結果如下:
基本上說明了是編碼問題導致的寬字元問題。具體的情況還有待學習研究。
感謝 消失的苦貓 的提示,相關參考:
[1]楊紅衛,吳星,毛鏐. VB6.0中Unicode編碼問題的靈活處理及妙用[J]. 電腦與信息技術,2005,(05):60-63.
推薦閱讀:
※同樣曾被用於系統級編程語言,Pascal 和 BASIC 為什麼失敗了?
※web前端設計有沒有類似vb,vc這類的可視化編程工具,用戶添加圖形,軟體工具自動生成代碼?
※25 萬條數據的 excel 文件,把每個數字都除以 10 ,怎麼做?
※用vb寫cs作弊器,是編程技術的應用,為什麼卻被cs玩家所不齒?
TAG:編程語言 | VisualBasic | 動態鏈接庫 |