VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

VFP 呼叫 DLL 元件 Byte 格式的問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
aujolin



註冊時間: 2006-04-11
文章: 4


第 1 樓

發表發表於: 星期一 四月 23, 2007 4:08 pm    文章主題: VFP 呼叫 DLL 元件 Byte 格式的問題 引言回覆

目前使用 VFP 在控制一塊 I/O 卡,
有使用到該 I/O 卡的 DLL,

以下為 VB 的範例說明

Write Data to USBIO
函式原型BOOL WriteIOData(DWORD,LPBYTE,DWORD,LPDWORD)
參數1 : DWORD dwDevice 裝置編號
參數2 : LPBYTE pSrc Data Pointer 8051有2個Port
byte[0]=Port1,byte[1]=Port2
參數3 : DWORD dwSize dwSize=2 , 2個Port
參數4 : DWORD dwRet 傳回寫入的大小
其中必須寫兩個byte至USBIO,因有兩個PORT,Port1 Port2
不能只寫一個byte給USBIO,否則會發生USBIO等待第二個
Byte的情形


宣告
Private Declare Function WriteIOData Lib _ "DevLink.dll" ( _ ByVal hInst As
Integer, _ ByRef pSrc As Byte, _ ByVal dwSize As Integer, _ ByRef dwRet As
Integer _
) As Byte


執行
Private Sub Command2_Click()
tmp(0) = "&h" & Text3.Text
tmp(1) = 100
A = WriteIOData(0, tmp(0), 2, ret1)
Text5.Text = A
Text6.Text = ret1
End Sub


問題來了,
Byte 的格式在 VFP 中要如何宣告呢?
有試過用 Integer 的方式宣告,呼叫正常,但是資料寫入失敗 (I/O卡無反應),
有試過用 Varbinary 的方式宣告,呼叫時便發生錯誤。

還請各位先進能幫忙。


PS:目前是使用 VFP9
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 2 樓

發表發表於: 星期二 四月 24, 2007 10:59 am    文章主題: 引言回覆

用"益眾"的卡 ^^.
Declare INTEGER OpenLinkDevice IN DevLink.dll Integer hInst, Integer @ pHandle
Declare INTEGER WriteIOData IN DevLink.dll integer hDevice, string @ pSrc, Integer dwSize,integer @ dwRet
Declare INTEGER ReadIOData IN DevLink.dll integer hDevice,string @ pSrc,integer dwSize,integer @ dwRet

mopen=0
Thisform.hardhandle= OpenLinkDevice(0, @mopen)
mstr = CHR(thisform.portvalue1.Value)+CHR(thisform.portvalue2.Value)
mdwret = 0
mret = WriteIOData(Thisform.hardhandle, @mstr, LEN(mstr), @mdwret)

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
aujolin



註冊時間: 2006-04-11
文章: 4


第 3 樓

發表發表於: 星期二 四月 24, 2007 3:47 pm    文章主題: 引言回覆

garfield 寫到:
用"益眾"的卡 ^^.
Declare INTEGER OpenLinkDevice IN DevLink.dll Integer hInst, Integer @ pHandle
Declare INTEGER WriteIOData IN DevLink.dll integer hDevice, string @ pSrc, Integer dwSize,integer @ dwRet
Declare INTEGER ReadIOData IN DevLink.dll integer hDevice,string @ pSrc,integer dwSize,integer @ dwRet

mopen=0
Thisform.hardhandle= OpenLinkDevice(0, @mopen)
mstr = CHR(thisform.portvalue1.Value)+CHR(thisform.portvalue2.Value)
mdwret = 0
mret = WriteIOData(Thisform.hardhandle, @mstr, LEN(mstr), @mdwret)




手頭上的 I/O 卡 剛好是[益眾]的
使用您所寫的 DLL 檔函數宣告方式,
測試結果已可以用,謝謝您的回覆,
又多學到了一招。

也有打去原廠做技術詢問,
不過他們也只能提供一些基本的資料,
那些資料都是 I/O 卡安裝光碟上面有的資料。

本來已經不抱希望了,
打算用 VB 再編譯一個 DLL 檔讓 VFP 來呼叫,
Byte 和 Integer 的部份就交給 VB 來處理,
還好,現在總算解決了。
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作