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++を使用したいと思います。
前もって感謝します。