11-05-2015 02:10 AM
質問がありますので、ご回答よろしくお願いいたします。
Windows7 64bitのPCにNI488.2をインストールして、GPIB-USB-HS経由で計測装置を動かそうとしていますが、
EXCEL2013のVBA(VBA7 64bit)から、DLL内のAPIを宣言して動作させることはできないのでしょうか。
ちなみに、宣言文はGPIBサンプルのVisual Basicのフォルダにあるものを流用しています(例えばのような
もの)が、
Declare Function ibdev32 Lib "gpib-32.dll" Alias "ibdev" (... )
"ファイルが見つかりません:gpib-32.dll"というエラーが出ます。
gpib-32.dllという名前のファイルを探すと、C:\Windows\SysWOW64 の下にあり、C:\Windows\System32
の下には無かったので、NI488.2 は、32bitアプリとして64bit版OSで動作させるものにた対応しているが、
64bitアプリとして64bit OSで動作させるものはないのでしょうか。
ちなみに、NI488.2のインストーラはweb版を使用していますが、
ni488225、ni488_312、NI4882_1500f0 あたりを試して見ましたが何れも同じ結果でした。
ご指導のほど、よろしくお願いします。
11-06-2015 12:10 AM
ぽよよん様
32bit開発環境しか持っていないものです。
gpib-32.dllって32bit環境下では、使えないと思われます。
グーグルでgpib-32.dll 64bitで検索するといろいろ(ほとんど英語)出てきました。
上記はVB.NETで同じようにgpib-32.dllを使われようとして同じ症状が出たっぽいです。(英語が苦手で間違ってるかも)
クラスライブラリを使うことで解決されたと思うのですが、VBAではたしか使えないかと。
NI-488.2ヘルプ(バージョンは3.1.2)の「APIを選択する」で面白い内容を見つけました。
NI4882、GPIB32は互換性があり、GPIB32をNI4882に置き換えれば64bitでも使えるって内容でした。
100%じゃないような言い回しですが、NI-488.2ヘルプ等で調べていただいて、試してみてはいかがでしょう?
(うまく動作するか結果を教えてほしいかも)
+++「APIを選択する」抜粋+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
バージョン2.6以降のWindows用NI-488.2は、2つのAPI(NI4882、GPIB32)をサポートします。
新しいNI4882 APIは、アプリケーションインタフェースを使用するかDLLに直接アクセスすることによって、NI-488.2ダイナミックリンクライブラリ(DLL)ni4882.dllへのアクセスを提供します。このAPIは、32ビットおよび64ビットアプリケーションでサポートされます。NI4882 APIを使用してすべての新しいアプリケーションを記述する必要があります。
古いGPIB32 APIは、アプリケーションインタフェースを使用するかDLLに直接アクセスすることによって、NI-488.2ダイナミックリンクライブラリ(DLL)であるgpib-32.dllへのアクセスを提供します。このAPIは、32ビットアプリケーションのみでサポートされます。
このNI4882 APIでは、既存のGPIB32 APIとの一致をできる限り維持しながら、最適なAPI設計が取り入れられています。
NI4882 APIは、既存のGPIB32アプリケーションに最小限の作業量で適用できます。多くの場合、アプリケーションは、インクルードファイルをni488.hからni4882.hに変更し、リンク済みオブジェクトファイルをgpib-32.objからni4882.objに変更することにより、コンパイルすることができます。ステータス変数タイプの符号付きプロパティの変更によって、警告が発生する可能性があります。NI4882 APIでの主な変更点は以下のとおりです。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11-08-2015 11:37 PM
su-sann5073様
回答ありがとうございます。
ni4882.dllの方は、system32の下にあり、やろうとしていることができるようになりました。
ちなみに、あれこれ探していると、visa64.dllというライブラリがあり、こちらもVBA7 64bit版
から実行できるようでした。
ただ、APIの関数インターフェイスが違うので、gpib32向けに書いていたプログラムを書き換
えようとしていたところですが、ni4882.dllの存在を教えていただき、助かりました。
ありがとうございました。