Private Sub Command1_Click()
Dim defrm As Long
Dim vi As Long
' 獲得visa的usb資源
Call viOpenDefaultRM(defrm)
' 打開設備
Call viOpen(defrm, "USB0::0x1AB1::0x0E11::DP8F192200227::INSTR", 0, 0, vi)
'發送設定命令
Call viVPrintf(vi, ":OUTP CH1,ON" + Chr$(10), 0)
' 關閉資源
Call viClose(vi)
Call viClose(defrm)
End Sub
以上是VB撰寫的通過USB控制DP831直流電源的程式,測驗沒問題。但我將該段代碼轉換成Delphi后,運行報錯,請高手指點下迷津!以下是我的Delphi代碼
function viOpenDefaultRM(sesn1:PLongint):Longint;stdcall external 'visa32.dll';
function viOpen(sesn1:PLongint;rsrcName:PChar;acessMode:Longint;timeout:Longint;sesn2:PLongint):Longint;stdcall external 'visa32.dll';
function viPrintf( vi:PLongint; writeFmt:pchar;ss:Longint): integer; Cdecl; external 'VISA32.DLL' ;
function viClose(sesn:PLongint):Longint;stdcall external 'visa32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
defrm,vi:PLongint;
begin
// 獲得visa的usb資源
viOpenDefaultRM(defrm);
//打開設備
viOpen(defrm,'USB0::0x1AB1::0x0E11::DP8F192200227::INSTR', 0, 0, vi);
//發送設定命令
viPrintf(vi,':OUTP CH1,ON'+#10, 0);
viClose(vi);
viClose(defrm);
end;
不知是哪里出了問題?
uj5u.com熱心網友回復:
沒有USB通訊的SDK說明么?核對一下改成Delphi時的變數型別,按出錯資訊慢慢除錯吧
uj5u.com熱心網友回復:
我感覺主要是發送命令有問題,VB的源代碼是如下'發送設定命令
Call viVPrintf(vi, ":OUTP CH1,ON" + Chr$(10), 0)
而我用Delphi的代碼是
viPrintf(vi,':OUTP CH1,ON'+#10, 0);
單步除錯到這里后,設備報遠程命令錯誤。不知有哪位老師能幫我查找到問題所在?
uj5u.com熱心網友回復:
VB的":OUTP CH1,ON" + Chr$(10),轉換成Delphi應該是啥樣的?uj5u.com熱心網友回復:
viPrintf為啥宣告為cdecl,其他的都是stdcall這種問題應該就是沒宣告對
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/52188.html
標籤:VCL組件開發及應用
