gpib-32.dllエクスポートへ直接アクセスする
次の各行がアプリケーションの最初の部分に記述されていることを確認してください。
#ifdef __cplusplus
extern "C"{
#include <windows.h>
#include" "ni488.h"
#ifdef __cplusplus
}
Win32アプリケーションでは、最初に gpib-32.dllをロードすることが必要です。次のコードは、LoadLibrary関数を呼び出してエラーを調べるものです。
HINSTANCE Gpib32Lib = NULL;
Gpib32Lib=LoadLibrary("GPIB-32.DLL");
if (Gpib32Lib == NULL) {
return FALSE;
}
各関数のプロトタイプについては、このヘルプファイルのキーワードを介してその関数のヘルプを参照してください。
ibdevやibwrtのように整数値を返す呼び出しでは、関数へのポインタは次のように指定します。
int (_stdcall *Pname)
ここで、*Pnameは関数へのポインタ名です。
FindLstnやSendListのように値を返さない呼び出しでは、関数へのポインタは次のように指定します。
void (_stdcall *Pname)
ここで、*Pnameは関数へのポインタ名です。続けて指定する関数のパラメータリストについては、このヘルプファイルのキーワードを介してその関数のヘルプを参照してください。
次の例は、ibdevとibonl呼び出しでの関数ポインタとパラメータリストの設定方法を示すものです。
int (_stdcall *Pibdev)(int ud, int pad, int sad, int tmo, int eot, int eos);
int (_stdcall *Pibonl)(int ud, int v);
次に、Win32アプリケーションでは、GetProcAddressを使って、アプリケーションに必要なグローバルステータス変数と呼び出しのアドレスを取得します。次のコードは、アプリケーションに必要なステータス変数と呼び出しへのポインタのアドレスを示すものです。
/* NI-488.2のグローバルステータス変数へのポインタ*/ (int ud, int pad, int sad, int tmo, int eot, |
static int(__stdcall *Pibonl) (int ud, int v); Pibsta = (int *) GetProcAddress(Gpib32Lib, (LPCStr)"user_ibsta"); Piberr = (int *) GetProcAddress(Gpib32Lib, (LPCStr)"user_iberr"); Pibcntl = (long *) GetProcAddress(Gpib32Lib, (LPCStr)"user_ibcnt"); |
Pibdev = (int (__stdcall *) (int, int, int, int, int, int)) GetProcAddress(Gpib32Lib, (LPCStr)"ibdev"); Pibonl = (int (__stdcall *)(int, int)) GetProcAddress(Gpib32Lib, (LPCStr)"ibonl"); |
GetProcAddressが失敗すると、NULLポインタが返されます。次のコードは、GetProcAddressへの呼び出しすべてが成功したことを確認するものです。
if ((Pibsta == NULL) || (Piberr == NULL) || printf("GetProcAddressに失敗しました。"); } |
ステータス変数または関数にアクセスするためには、ポインタの参照を解除する必要があります。次のコードは、アプリケーション内から関数を呼び出してステータス変数にアクセスするものです。
dvm = (*Pibdev) (0, 1, 0, T10s, 1, 0); if (*Pibsta & ERR) { printf("呼び出しに失敗しました"); } |
アプリケーションを終了する前に、次のコマンドを使ってgpib-32.dllを解放してください。
FreeLibrary(Gpib32Lib);
その他のgpib-32.dllへの直接アクセスの例については、NI-488.2ソフトウェアにインストールされているダイレクトエントリ用サンプルプログラムdlldevquery.cとdll4882query.cを参照してください。ダイレクトエントリについての詳細は、Win32 SDK(ソフトウェア開発キット)のヘルプを参照してください。