看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《fumizuki (矇面加菲獅)》之銘言: : ※ 引述《macgyfu (YFU)》之銘言: : : Hi : : 小弟最近嘗試要用VB呼叫dll來用,基本上那些dll我都用VC++使用過 : : ,但是用VB呼叫了幾個發現了一些問題,C的function常常包含了unsigned short : : ,unsigned char和xxx(unsigned short array[10])這種要傳array的型態,遇到 : : 這種問題不知道要怎麼處理? : 用相近的型態來替代吧 : unsingned short → long : unsingned char → string 說到這個我覺得奇怪,在C code裡面如果是xx(int x)的話,在VB我要用ByVal x as Long 才有辦法跑,不然就直接或沒有反應,然後unsigned short我也用long想跑過,但是執行 到這一步程式就會當掉,有上網google了幾個,似乎有幾篇文章有提到類似的問題,但還 再研究中,因為我是要丟變數給dll,不知道格式要不要在修改過? 謝謝你的回答 我在研究看看 : 陣列用傳址的方式... : VB6有提供這三個函數可以取得變數位址 : strPtr(), varPtr(), objPtr() : 函數的位址 AddressOf xxxx() : WindowsAPI 的 CopyMemory() 可以進行記憶體操作o.o : (不過這是危險的動作,操作不當是會直接關掉程式的...) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.155.31
cole945:因為你用VC++編,他的int是4byte,但在VB6,Integer是2Byte 01/16 00:01
cole945:轉換時一定要注意參數type的大小~ 01/16 00:02
cole945:對了,你從C DLL那邊的unsigned short應該是2-byte,所以你 01/16 00:11
cole945:在VB6也應該用對應的 2-byte 的Integer 來接收~, 但因為 01/16 00:11
cole945:Integer是有號,所以超過0x7FFFF的數會因為2的補數表示法 01/16 00:12
cole945:的關係變成負數,若是變成負數表示超過範圍,加回&h10000即 01/16 00:13
cole945:可。但Integer範圍有限,所以你要改用Long array來放.. 01/16 00:14
macgyfu:我在MSDN看到.NET有UShort的資料型態,這是VB.Net嗎? 01/16 01:53
macgyfu:VBA裡面有辦法使用嗎? 01/16 01:55
macgyfu:或VB6.0 01/16 01:55
fumizuki:.NET 和 VB6 的資料型態 大小 是不一樣的... 01/16 06:15
fumizuki:unsigned short 的最大值是65536 VB6的long 是65535 01/16 06:16
cole945:.NET的ushort是到65535(0xFFFF)才對(總之是-byte), VB6的 01/16 22:29
cole945:Long是有號4Byte,所以值域在正負2G~ MSDN上應該已經查不到 01/16 22:30
cole945:VB6那時的相關資料吧@.@? 用google搜 VB6和type應該比較快 01/16 22:31
cole945:不然去灌 visual studio 6 那時的離線版的MSDN文件吧@.@ 01/16 22:32
macgyfu:有點feeling了,灌了VB2005亂Try,之前VB6要用long在2005괠 01/16 22:35
macgyfu:要用integer,然後在C裡面用unsigned short在vb2005要用 01/16 22:36
macgyfu:short,還蠻妙的。 01/16 22:36
fumizuki:喔最大值我記錯了 vb6 integer 32767 long 2147483647 01/17 06:38