1

Qt(4.7.0)を使用してWindows(7)アプリケーションを開発し、DLL(NI visa32.dll)のいくつかのメソッドを呼び出して、GPIBポートを介して計測器と通信します。製造元のヘッダーファイルも利用できます(visa.h)。

プロジェクトファイルで、ファイルが配置されている元の場所へのパスとライブラリ参照を次のように追加してみました。

INCLUDEPATH += "C:/Program Files/National Instruments/Shared/CVI/Include"  
LIBS        += "C:/Windows/System32/visa32.dll"

しかし、コンパイルエラーが発生します:

collect2: ld returned 1 exit status

DLLをQtにインポートする手順に従って、「visa32.dll」から「visa.a」を作成し、それらをサブフォルダー「visa / lib」にコピーして、プロジェクトファイルにパスとライブラリを追加しました。

INCLUDEPATH += visa/include  
LIBS        += -Lvisa/lib  
LIBS        += -lvisa.a

-lvisaまたはも試してみましたが、すべての場合で、またはが見つからない-lvisa.dllという別のコンパイルエラーが発生します。元のヘッダーファイル「visa.h」を編集し、ファイル内のすべてのオブジェクトにQ_DECL_IMPORTのプレフィックスを付け、extern「C」ステートメントが存在することを確認しました。-lvisa-lvisa.a-lvisa.dll

アプリケーションにヘッダーファイルへの参照を次のように含めます。

#include "visa.h"

また、コンパイラはvisa.hファイルに属する参照オブジェクトを認識していることに注意してください。

このコンパイルエラーを解決するための助けをいただければ幸いです。


また、VisualC++のDLLリファレンスの指示に従ってVisualC++(2010)を試してみました。この場合、コンパイルエラーは発生しませんが、リンクエラーが発生します。例えば:

AgiE364X.obj: error LNK2019: unresolved external symbol  
"extern "C" long __stdcall viClose(unsigned long)"  

NI-VISAで呼び出されたメソッドをviCloseにする。

ただし、VisualC++ではなくQtC++を使用したいと思います。

前もって感謝します。

4

2 に答える 2

0

私は Qt に慣れていないのでわかりませんが、いくつかの推測があります: INCLUDEPATH 文字列にスペースがあることに気付きました。また、LIBS += -Lvisa/lib にはキャピトル L があります (これは正しいですか?)。これがあなたの問題だと言っているわけではありませんが、おそらく試してみる価値があります。頭に浮かぶ最後のことは、Qt Creator を部分的にのみ使用している場合は、#include "visa.h" と入力して、オートコンプリートが完了するかどうかを確認することです。可能であれば、残りは問題ありません。Ctrl+Space でオートコンプリートをトリガーします。パスを台無しにすると、オートコンプリートがこの種の良いゲージになることに気付きました。

于 2011-02-16T20:29:26.853 に答える
0

borland c++NIが提供するVISAのライブラリには、でコンパイルされたものと でコンパイルされたものの2種類がありますmicrosoft vc++

Qtに関しては、でコンパイルする必要があるQtを使用して、でコンパイルされたものMSVCをリンクすることもできます。VISAのライブラリはデフォルトで入っています。visa32.libMSVC.lib.dllMSVC"C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc"

インクルード ディレクトリはC:\Program Files\IVI Foundation\VISA\WinNT\includeデフォルトです。

実際、上記の情報は、デバイス ドライバーをインストールした後の VISA の例から知ることができます。

于 2013-02-25T12:54:24.173 に答える