全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2979
推到 Plurk!
推到 Facebook!

將*.bas 轉成 *.pas

尚未結案
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-04 07:30:11 IP:211.74.xxx.xxx 未訂閱
我要用delphi去控制 Hp 的 GPIB 卡 但他僅提供 VB 及 VCC 的 LIBRARY 所以我必須自己宣告函數(*.pas) 將*.bas轉成*.pas 但去遇到一些問題 http://user52.starbeta.org/others/visa32.dll http://user52.starbeta.org/others/visa32.bas http://user52.starbeta.org/others/visa32.pas
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-08 10:22:56 IP:218.167.xxx.xxx 未訂閱
不知道您遇到什麼問題 可否說明清楚一點 您的pas 宣告看來沒有明顯問題 不過程式碼呼叫function 時記得要改用您自己定義的function name viOpenDefaultRM, viGetDefaultRM 而不是原來.BAS 中的 Alias "#141" "#128" ... 不過我猜想您是否還需要下列檔案? AGVISA32.DLL 您的VISA32.DLL 似乎需要這個檔案 一點小意見 如有錯誤還請包涵
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-09 11:53:14 IP:220.228.xxx.xxx 未訂閱
不曉得你是否Compile會有錯誤,我下載了你上傳的檔案試了一下,發現你的宣告少了 Function viMoveOut8; external 'VISA32.DLL'; 所以Compile會有錯誤,但我沒有試各個function的功能有沒有問題。 不知你遇到的問題是什麼? Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-09 22:12:34 IP:210.68.xxx.xxx 未訂閱
http://user52.starbeta.org/others/visa32.pas 我已重新上載visa32.pas 如果您有興趣可以下載來玩 當您compiler後 您將發現錯誤訊息 如vb函數宣告用any型態 那在delphi要如何宣告呢? 完整程式在此 http://user52.starbeta.org/others/visa_test.rar
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-10 08:55:34 IP:220.228.xxx.xxx 未訂閱
我查了一下資料: 所謂Any型別的參數,指的是VB程式可以傳入數值、字串、或自訂型別..等資料的參數,至於可以傳入哪一種型別的資料,則與個別API函數有關。 所以我把你的程式裡Any改成Variant,另外Sub改成procedure關鍵字,這樣Compile可以過,你試試看! 還是老話一句,我沒有試各個function的功能! Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-10 18:43:19 IP:59.104.xxx.xxx 未訂閱
為何我的visa32.dll需要此檔案AGVISA32.DLL 哪裡有註名?
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-11 09:02:14 IP:220.228.xxx.xxx 未訂閱
我找不到你哪裡有需要用到AGVISA32.DLL耶! Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-26 19:02:20 IP:211.74.xxx.xxx 未訂閱
雖然可以compiler但呼叫副函數時 就掛了!!
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-29 09:32:08 IP:220.228.xxx.xxx 未訂閱
可以說明是哪一個函式發生錯誤嗎? Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-01 10:48:06 IP:59.105.xxx.xxx 未訂閱
status = viOpenDefaultRM(defrm) 一執行就掛了
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-01 14:22:32 IP:220.228.xxx.xxx 未訂閱
我手上沒有相關的資料,請教一下status = viOpenDefaultRM(defrm) 的defrm參數你傳什麼呢?我看你原本的程式只有宣告 defrm: Longint; 並沒有給初始值,我隨便給個值就不會當了,你可能要查一下該給什麼值了! Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-02 18:15:17 IP:59.105.xxx.xxx 未訂閱
的確,我隨便給一個值就不會當 但我在vb卻不用給值也不會當 defrm好像是return的值 以下的程式執行到最後一行 出現型態不符的錯誤訊息 搞不懂!?? =================================== defrm:=2; viOpenDefaultRM(defrm); viOpen(defrm, 'GPIB0::5::1::INSTR', 0, 0, vi1) ; str := 'VOLT ' edit1.Text '; CURR ' edit2.Text Chr(10); showmessage(str); viVPrintf(vi1, str, 0); showmessage(str); viVPrintf(vi1, 'OUTP ON' Chr(10), 0);
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-12-03 08:48:22 IP:220.228.xxx.xxx 未訂閱
再來我也搞不清楚 viVPrintf(vi1, str, 0); 是要做什麼用的了!你這是參考VB寫的嗎? Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-12-03 18:31:30 IP:59.105.xxx.xxx 未訂閱
沒錯 就是參考vb寫的 它是送指令給儀器
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-12-06 09:07:31 IP:220.228.xxx.xxx 未訂閱
我剛才看了你VISA32.pas裡的宣告,再查了一下VB的宣告: Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long是傳址的, delphi需改成 function viOpenDefaultRM(var sesn : Longint): Longint; stdcall; 加上var,你再試看看!所有VB宣告沒有『ByVal』全部加上var! Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-12-20 20:44:14 IP:59.105.xxx.xxx 未訂閱
我已經照您的指示將所有VB宣告沒有『ByVal』全部加上var 但還是有問題 你可以看看 http://user52.starbeta.org/others/visa_test.rar 真希望不會打擾你太多
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-12-21 10:40:09 IP:220.228.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
status: longint ;           //VISA function status return code
defrm: longint  ;           //Session to Default Resource Manager
pwr: integer;
str: string;
vi1: longint;
params: Variant;    begin
     //   pwr := -68;
     defrm:=2;
   viOpenDefaultRM(defrm);               str:= 'GPIB0::5::1::INSTR';
    viOpen(defrm, str, 0, 0, vi1) ;     str := 'VOLT '   edit1.Text   '; CURR '   edit2.Text   Chr(10);
    showmessage(str);        viVPrintf(vi1, str, params);
         showmessage(str);
    str:='';
 str := 'OUTP ON'   Chr(10);
       showmessage(str);        viVPrintf(vi1, str, params);
end;
紅色那幾行是我修改的程式,但執行第一次的viVPrintf(vi1, str, params);沒有問題,第二次會有問題,應該是我沒有卡的關係,你再試試看吧! 有var的傳址變數需先宣告再傳進去,無法直接傳常數! Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-12-22 19:47:40 IP:59.105.xxx.xxx 未訂閱
http://user52.starbeta.org/others/visa_test.rar 還是不行阿 我已更新檔案 你可以下載再試試 內有附錯誤訊息err.doc
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-12-27 13:30:17 IP:220.228.xxx.xxx 未訂閱
我測試的結果還是在第二次的viVPrintf(vi1, str, params);出錯! 你可以寄一個原始的Basic的範例給我看看嗎? Ian
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-12-27 21:47:35 IP:59.105.xxx.xxx 未訂閱
http://user52.starbeta.org/others/visa32.bas
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-12-28 08:46:18 IP:220.228.xxx.xxx 未訂閱
我說的是可以執行的範例程式,不是要他的宣告程式! Ian
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#22 引用回覆 回覆 發表時間:2004-12-28 13:54:37 IP:220.139.xxx.xxx 未訂閱
對不起插個嘴(我是來亂的 ) 之前公司才在 >) < href="http://free.greenworld.com.tw/~dllee/" target="blank">吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com
david753
一般會員


發表:19
回覆:22
積分:8
註冊:2004-07-20

發送簡訊給我
#23 引用回覆 回覆 發表時間:2004-12-29 19:28:59 IP:59.105.xxx.xxx 未訂閱
status = viOpenDefaultRM(defrm) If (status < VI_SUCCESS) Then GoTo VisaErrorHandler Call viOpen(defrm, "GPIB0::5::0::INSTR", 0, 0, vi1) str = "VOLT " Text1.Text "; CURR " Text5.Text Chr$(10) Call viVPrintf(vi1, str, 0) Call viVPrintf(vi1, "OUTP ON" Chr$(10), 0) VisaErrorHandler: Dim strVisaErr As String * 200 Call viStatusDesc(defrm, status, strVisaErr) MsgBox "*** Error : " & strVisaErr, vbExclamation, "VISA Error Message"
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#24 引用回覆 回覆 發表時間:2004-12-30 11:31:28 IP:220.228.xxx.xxx 未訂閱
我把程式改成下面這樣只Run一次viVPrintf(vi1, str, params); defrm:=2; status := viOpenDefaultRM(defrm); if (status < VI_SUCCESS) then raise Exception.Create('Open error'); viOpen(defrm, 'GPIB0::5::0::INSTR', 0, 0, vi1); str := 'VOLT ' edit1.Text '; CURR ' edit2.Text Chr(10); viVPrintf(vi1, str, params); //viVPrintf(vi1, 'OUTP ON' Chr(10), params); ShowMessage('123'); 程式會跑完最後一行ShowMessage('123');後才出現錯誤, 把第二行加上去後也是跑完最後一行ShowMessage('123');後才出現錯誤, 不知是不是我沒有卡的關係!我出現的錯誤和你出現的不一樣! Ian
系統時間:2024-05-15 7:22:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!