質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

Q&A

解決済

1回答

2900閲覧

C# ReadIEEEBlockが反応しない

mi-san

総合スコア14

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

0グッド

0クリップ

投稿2020/05/15 07:20

前提・実現したいこと

Visual Studio2012を使用しC#でネットワークアナライザの制御をしたいです。
C#のビットマップ形式のスクリーンショット取得するためのオシロスコープ制御のサンプルプログラムを参考にプログラムを書きました。
本来はスクリーンショットした画像ではなくてネットワークアナライザのDドライブに入っている画像を転送するためのプログラムを作成している最中なのですが、
何となくこのプログラムを活用できそうなので仮でかいています。

発生している問題・エラーメッセージ

'Ivi.Visa.IMessageBasedFormattedIO'に'ReadIEEEBlock'の定義が含まれておらず、型'Ivi.VIsa.IMessageBasedFormattedIO'の最初の引数を受け付ける拡張メソッドが見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足しています。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8using System.IO; 9using Ivi.Visa.Interop; 10using Ivi.Visa; 11 12namespace kari 13{ 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponet(); 19 } 20 IMessageBasedSession session; 21 IMessageBasedFormattedIO instrument0; 22 /// ビットマップ形式のスクリーンショット取得 23 24 25 private Byte[] GetScreenshot() 26 { 27 const string IP ="ネットワークアナライザのIPアドレス" 28 const strinf IP1 = "TCPIP0::" + IP + "::inst0::INSTR" 29 Byte[] dat = null; 30 instrument0.WriteLine(":DISPlay:DATA? BMP"); 31 try 32 { 33 // タイムアウトを20sに設定 34 session.IO.Timeout = 20000; 35 dat = instrument0.ReadIEEEBlock(IEEEBinaryType.BinaryType_UI1) as Byte[]; 36 } 37 catch 38 { 39 } 40 finally 41 { 42 // タイムアウトをデフォルト(2s)に戻す 43 session.IO.Timeout = 2000; 44 } 45 return dat; 46 } 47 } 48} 49 50 51

試したこと

何かを追加しないといけないのかな?とおもい再度違う会社のVISACOMライブラリのダウンロードしてみたりしましたが駄目でした。
C#初心者で独学でやろうとしているのでどうやって検討すればいいかわかりません。。。
ちなみに接続はbyte[] dat=null;以下のプログラムを違うのにしたら
ビルドが通り制御もうまくいきました。
色々調べたものを組み合わせてプログラムを組んだせいかと思いますが
何かエラーの原因が分かりましたら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mi-san

2020/05/15 07:27

今回のに関係ありそうな VISA COM 5.12 Type Library、 Ivi.Visa Assembly は参照追加しています。 他にも参照しないといけいのがあれば教えていただけたら嬉しいです。
Zuishin

2020/05/15 07:31

オブジェクトブラウザーを見てください。その中に Ivi.Visa.IMessageBasedFormattedIO はありますか? あるならそこに ReadIEEEBlock があるかどうか確かめてください。 大文字小文字も含め、完全に一致しないと使えません。
mi-san

2020/05/15 07:39

ありがとうございます。 Ivi.Visa.IMessageBasedFormattedIOはあったのですが ReadIEEEBlock はなかったです。。。 何をダウンロードすればいいかもしよければ回答で、教えていただけたらありがたいです。
Zuishin

2020/05/15 08:18 編集

使ってないのでわかりません。タイプライブラリがそもそも提供されていない可能性もあります。VBA でできるなら COM 自体はあるんでしょうから、手っ取り早く dynamic を使って遅延バインディングしてください。 参考までに Excel を遅延バインディングするには次のようにします。 dynamic excel = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
mi-san

2020/05/15 07:46

なるほど…了解です。ありがとうございます。 知識不足で色々聞いてしまいすみません・・・ dynamicについて知らないので調べてみようと思います。 ご丁寧にありがとうございました。
Zuishin

2020/05/15 07:50

コメントを修正しました。ProgID は VBA で使っているものを使ってください。
mi-san

2020/05/15 08:05

ありがとうございます。そんな便利なものがあったんですね!活用させていただきます。とても助かりました。 解決させていただけそうなので、ベストアンサーにさせていただきたいのですが…修正依頼欄でできないのでよろしければ回答の欄になにか書いていただけたら嬉しいです。
Zuishin

2020/05/15 08:07 編集

これで解決したのであれば回答します。
退会済みユーザー

退会済みユーザー

2020/05/15 08:09

そもそもCOMではなく、.NET用のアセンブリが存在していて、そちらを見ているのではないですか。 IMessageBasedFormattedIO でググったら、1件目でそれらしいPDFがヒットしましたが。 英語だからと面倒くさがらずに、公式のリファレンスやドキュメントがあるならきちんと目を通してください。
mi-san

2020/05/15 08:12

退社してしまいプログラム確認できるのが月曜になってしまうので確証はないですが、解決しそうだと思うのでよろしければお願いします。
mi-san

2020/05/15 08:17

radianさん 英語のプログラムマニュアルなども見てみて調べたりもしたのですが、私が知りたいことを見つけれなかった、もしくは理解することができませんでした。もう少し基本知識もつけたいと思います。すみませんありがとうございます。
Zuishin

2020/05/15 08:21

まだ情報が出そうですね。条件を満たすアセンブリやタイプライブラリがみつかるならそれに越したことはないので、そちらを採用してください。急ぐようであれば遅延バインディングを自分で確かめて自己解決してください。
mi-san

2020/05/15 08:29

ありがとうございます。 急ぎではないので、お二人に教えていただけたことを月曜日またいろいろ調べようと思います。ありがとうございます。
mi-san

2020/05/18 01:42

radianさんのCOMではない所を見ていると考え調べた結果、 その通りで、違う場所が参照されてしまっていたみたいです。 COMの方を参照させるように書き直したら無事ReadIEEEBlockが反応してくれてエラーがでなくなりました。ありがとうございます。 今回のエラーのもとは、独学でネットで調べた色々な情報を元にプログラムを作成していたせいで、基本知識がまだわかりきってない状態だったせいで起こったことだと思うのでちゃんと1から学んでいきたいと思います。お二人ともありがとうございました。
guest

回答1

0

自己解決

C#

1 IMessageBasedSession session; 2 IMessageBasedFormattedIO instrument0;

ここでの宣言の仕方が
今回参照したかったVISA COM 5.12 Type Libraryではなく
Ivi.Visaのほうを参照してたせいでReadIEEEBlockが反応しなかったみたいです。

お二人のおかげで解決できました。ありがとうございました。

投稿2020/05/18 02:24

mi-san

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/18 04:25

.NET用アセンブリが存在するということは、そちらにも名前が違うだけで同じ機能を思ったメソッドが恐らく存在すると思います。COMを直接叩くより安全かつ効率的な場合が多いので(COMは正しく使わないとメモリリークを招く場合もある為)、可能であれば.NET用アセンブリを使ってみた方がよいかもしれません。
mi-san

2020/05/18 23:53

ありがとうございます。 COMと.NETの違いがまだ分かっていないので、出来るだけ.NET用を使用したほうがいいと知ることが出来て良かったです。色々調べてみて.NETでやる方向を探してみようと思います。今回は前回の質問の回答に引き続き教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問