VBIB-32.basをVB.netで使用したい
- 1 名前: iwao_k 投稿日:2003/11/25(火) 18:43 ID:VnEiPxB2
- こんにちは。
現在、National Instruments PCI-GPIB、
Windows Xp VB.netの環境でTektronix 794D(オシロスコープ)の
波形を取り込むようなプログラムを開発しています。
同じ事をするVBで作成されたプログラムがあり、このプログラムの中を
見てみると、GPIBコントロール用にVBIB-32.basというモジュールがありました。
このモジュールをVB.netにコピーして使用してみると、
" 'System.ExecutionEngineException' のハンドルされていない例外が
preamp_meas.exe で発生しました。"
というエラーが表示され、このVBIB-32.basモジュール内で止まってしまいます。
このVBIB-32.basというファイルはVB.netでは使用出来ないのでしょうか?
どなたかこのモジュールを使用して、プログラムを開発したかたが
いらっしゃいましたらご教授をお願いしたいと思います。
また、この方法で使用出来ないとして、他の方法でGPIBをコントロールする
方法がありましたら、併せてそちらの方法もご教授頂きたいと思います。
厚かましい質問ですが、よろしくお願いします。
- 2 名前: 日々草 投稿日:2003/11/25(火) 19:56 ID:gf5CaQ5E
- VBIB-32.bas NIから供給されているドライバなどの一式に
含まれているもので VB.net で使用できるかどうかはNIの
ページを参照するか、問い合わせてみたらよろしいのでは
ないでしょうか。
- 3 名前: マニク◆Jy2pR/5Y 投稿日:2003/11/25(火) 21:08 ID:???
- VB.NETでもDeclareを使ってアンマネージドdll関数呼び出す事は可能。
しかしVB6とはデータ型が違っているので注意。Integer型は
もはや16bitではなく32bitである。
参考になるかわからないけど、MSDNライブラリに載ってる
MessageBox()関数の呼び出し霊はこのように宣言されてる。
Declare Auto Function MBox Lib "user32.dll" _
Alias "MessageBox" (ByVal hWnd As Integer, _
ByVal txt As String, ByVal caption As String, _
ByVal Typ As Integer) As Integer
で結局、VBIB-32.BASに記述されている関数のうち、必要な関数宣言
を全て書き直さないとだめです。
- 4 名前: iwao_k 投稿日:2003/11/25(火) 21:13 ID:VSHvFwEQ
- 早速のお返事有難うございます。
NIさんへ問い合わせてみたのですが、結果はVB.netには対応していないという事でした。
何か裏技があればと思い、書き込みさせて頂きました。
最初に書いておくべきでした。すいません。
そうすると、皆さんはVB.netでGPIBをコントロールする場合は、
どのような方法を取られているのでしょうか?
Webなどで探してみると、NI-VISAなるものがありましたがサンプルなどが
見つからずに苦労しております。
NI-VISAに関する情報やよいURLなどがありましたら、お教え頂けないでしょうか。
その他、VB.netでGPIBをコントロールする方法などがありましたら、
お手数ですがご教授をお願いします。
よろしくお願いします。
- 5 名前: マニク◆Jy2pR/5Y 投稿日:2003/11/25(火) 21:14 ID:???
- 補足、、、というかふと思い出したんだけど、、、
NIのVBIB-32.BASの記述内容は単純なDLL関数のDECLARE宣言
では無かったと思う。アプリから使う殆どの関数は、実際には
別の関数名でDLLを呼び出した後IBCNT等のグローバル変数を更新
する処理を追加したヘルパー処理を行なっている。単純に書き換
えるのは難しいかも。
- 6 名前: マニク◆Jy2pR/5Y 投稿日:2003/11/25(火) 21:19 ID:???
- >>4
NI-VISA 3.0をインストールしてVISA COMを使うのがベスト。
但しNI-VISAのヘルプにはVISA COMについて一切触れていない
ので、どうやって使い方を習得するかが問題。
NIにはディスカッション・フォーラム(英語)があるので
そこで尋ねてみると良いかも。
- 7 名前: iwao_k 投稿日:2003/11/25(火) 21:20 ID:VSHvFwEQ
- マニクさん有難うございます。
日々草さんへ返事を書いている間に投稿が被ってしまいました。
貴重な情報をありがとうございます。
ちょっとあきらめかけていたのですが、関数宣言を見て
書き直してみようと思います。
引き続き情報があれば、よろしくお願いします。
- 8 名前: iwao_k 投稿日:2003/11/27(木) 23:27 ID:VSHvFwEQ
- こんにちは。iwao_kです。
上記の件ですが、マニクさんに教えて頂いた変数を書き換える方法で
"ibfind"は使えるようになりました。ありがとうございます。
その後、オシロスコープに命令を送るためにibwrtコマンドを使用しましたところ、
ibwrtコマンドで指定した動作をオシロスコープではしているのですが、
"System.ExecutionEngineException' のハンドルされていない例外が meas.exe で発生しました。"
と、表示されibwrtコマンドを書いている行でストップしてしまいます。
変数の型などを確認しても間違いはなさそうなのですが、
ibwrtコマンドを使用する場合には何か注意事項などがあるのでしょうか?
何度も申し訳ありませんが、何か気が付いた点などがありましたら
ご教授をよろしくお願いします。
- 9 名前: マニク◆Jy2pR/5Y 投稿日:2003/12/01(月) 23:17 ID:???
- アドバイスといっても最近はAgilent GPIBばっかしなので、
手元にNI-488.2M環境が無くて詳細がちと分かりません。。。
VBIB-32.BASはGPIB-32.DLLの単純な宣言ではなく、古くから
のBASIC言語ライブラリとソース互換になるように記述した
ものです。例えばibwrtなんて関数は実際にはGPIB-32.DLL
からはエクスポートされていませんよね。多分、GPIB-32.DLL
から直接インポートする関数(アプリが使う関数とは別の
名前のもの)のDECLARE宣言にデータサイズ等の不整合があるん
じゃないかと思いますが。
あるいは最終兵器としてVISA COM環境に移行するとか。
VISA COMに関する書き込みがここの掲示板の過去ログに
あったと思います。あと、2ch掲示板「機械・工学」板にも
GPIB関連のスレがあるので参考にしてみては。
- 10 名前: iwao_k 投稿日:2003/12/02(火) 00:06 ID:kwymAbD2
- こんにちはiwao_kです。
こんな遅い時間にありがとうございます。
やはり、実際に見えない場所にまだ型の不整合があるのですね。
教えて頂いた、掲示板をチェックしてみます。
これで駄目な場合は、NIさんのMeasurment Studioという物を
購入すれば、VBIB-32.basで定義されているコマンドは使用出来ると
いうことなので、会社と掛け合ってみようと思います。
もう少しではないかと思っていたので残念ですが‥
マニクさん、何度もお返事を頂きありがとうございました。
- 11 名前: k 投稿日:2004/01/06(火) 17:49 ID:NWi1XLV6
- iwao_kさん、今日は。
私も同じようにVB.NET2003でVBIB-32.basを使いたいと思い
色々トライしてみました。
アップグレードウイザードで変換後、下記のように修正したところ
送受信共に問題なくできるようになりました。
私も他に問題が出るか知りたいので
VBIB-32.VBの内容を詳しく知りたい場合は書き込みして下さい。
Declare Function ibwrt32 Lib "Gpib-32.dll" Alias "ibwrt" (ByVal ud As Integer, <MarshalAsAttribute(UnmanagedType.VBByRefStr)> ByRef sstr As String, ByVal cnt As Integer) As Integer
Declare Function ibrd32 Lib "Gpib-32.dll" Alias "ibrd" (ByVal ud As Integer, <MarshalAsAttribute(UnmanagedType.VBByRefStr)> ByRef sstr As String, ByVal cnt As Integer) As Integer
- 12 名前: tyjoe 投稿日:2004/02/19(木) 15:01 ID:???
- i got a same problem as your discussion when i upgrade my program to vb.net 2003 from vb6.0
i can debug my program but when my program call the function just as ibwrt32 and ibrd32 etc.
'bi-bi' rings the machine .i don't know what's happened..
by the way what is the mean of <MarshalAsAttribute(UnmanagedType.VBByRefStr)>
writen by MR.K.? thanks all
- 13 名前: tyjoe 投稿日:2004/02/19(木) 15:43 ID:ASvjOb8g
- hi iwao_k san
did you work out your project?
i am also bummed out that i should take out a
proposal about that upgrade in short time.
maybe you can give me some suggestion ,Thanks a lot
- 14 名前: 匿名488 投稿日:2004/02/19(木) 17:23 ID:???
- <MarshalAsAttribute(UnmanagedType.VBByRefStr)>
It permits that the Unmanaged-code (Gpib-32.dll) changes a content of "sstr".
- 15 名前: 匿名488 投稿日:2004/02/19(木) 22:22 ID:vrs6xqSI
- VBIB-32.BASなんかで悩まないでVISA使えばいいじゃん。
- 16 名前: 匿名488 投稿日:2004/02/20(金) 03:02 ID:???
- >>15
新規案件は別として、この手の事例は、
現存製品のマイナーチェンジの際か、
将来的な保守と MS 開発環境の寿命を考えて行う
プラットフォーム移行で、どちらかというと
動いている部分には手を掛けたくないが多いんじゃないかと。
この手法は JavaVM から(JNI 経由?)で DLL を呼ぶ
のと同じような違和感はあるのですが。
- 17 名前: tyjoe 投稿日:2004/02/23(月) 17:16 ID:1yH0L4sc
- Thank you Noname488 and your suggestion
i worked out my project with the method writen by Mr./Ms.K.
but i got a other problem when my program go into the Gpib-32.dll
my program is stopped sometimes.if i restart my computer everything become Ok.
i don't know what is happened.
- 18 名前: Typejp 投稿日:2004/05/17(月) 17:02 ID:Y0CUN786
- 以前、以下のWebで記載されていましたが、今は???
http://www.insight-inc.co.jp
サンプルソフトの動作確認は、以下の環境で行っています。
PC: IBM-PC/AT 互換機
OS: Windows2000/XP
GPIB I/F: National Instruments (以下 NI) 社製 GPIB I/F ボード
開発言語: VisualBasic.net
VB.net 用のプロジェクトを使用する場合には、別途 当社の以下のファイルを、
プロジェクトの標準モジュールに追加してください。
NIGLOBAL.bas
VBIB-32.bas
- 19 名前: 匿名488 投稿日:2004/05/20(木) 08:19 ID:???
- >>18
当社って、NIの社員?
新着レスの表示