指定されたデバイスシンボル/グループシンボル/シンボルシートの定義情報(データ型やデータ数など)を求めます。
関数名
INT WINAPI GetSymbolInformation(LPCSTR sNodeName,LPCSTR sSymbolName,INT iMaxCountOfSymbolMember,LPSTR osSymbolSheetName,SymbolInformation* oSymbolInformation,INT* oiGotCountOfSymbolMember);
引数
sNodeName: 局名は「#WinGP」固定になります。
sSymbolName: (In)シンボル/グループ名/シート名
iMaxCountOfSymbolMember: (In)求める情報の最大数1以上の値を指定してください。用意したoSymbolInformationの個数を指定します。
osSymbolSheetName: (Out)sSymbolName が属しているシンボルシートの名前を返します。66バイト以上のワークを用意してください。
oSymbolInformation: (Out)求めた詳細情報を配列の形で返します。
iMaxCountOfSymbolMemberで指定した個数分をワークとして用意してください。
oiGotCountOfSymbolMember: (Out)実際にoSymbolInformation に返した情報数を返します。
戻り値
正常終了:0
異常終了:エラーコード
特記事項
SymbolInformationの構造
struct SymbolInformation
{
WORD m_wAppKind;// データタイプ シンボルの場合は1 ~ 12,グループの場合は0x8000
WORD m_wDataCount; // データ数
DWORD m_dwSizeOf; // アクセスするのに必要なバッファのバイト数
char m_sSymbolName[64+1];// シンボルもしくはグループの名前
char m_bDummy1[3];// 予約
char m_sDeviceAddress[256+1]; // デバイスアドレス(グループの場合は空白です)
char m_bDummy2[3];// 予約
};
oSymbolInformationに求めた情報が、SymbolInformation構造の配列で返りますが、1個目にはsSymbolNameで指定されたシンボルもしくはグループ、シートの情報がセットされます。
2個目以降には、sSymbolName がグループの場合は、グループのメンバーの情報がセットされます。
sSymbolNameがシートの場合は、シート全体の情報がセットされます。
sSymbolNameがシンボルの場合には、2 個目以降はありません。
対象のシンボルがビットオフセットシンボルの場合、以下の点について注意してください。
(1)ビットオフセットシンボルを情報元のシンボルとして直接指定した場合(sSymbolNameにビットオフセットシンボルを直接指定した場合)は、oSymbolInformationの1個目のSymbolInformationのm_dwSizeOfには、ビットシンボルをアクセスするためのバイト数2がセットされます。
情報元が1シンボルなので、oSymbolInformation の2個目以降はありません。
(2)情報元のシンボルとしてはグループシンボルを指定し、そのグループ内にビットオフセットシンボルがある場合、oSymbolInformationの2個目以降のm_dwSizeOfは、グループアクセス時のメンバーとしてアクセスサイズなので0がセットされます。
メンバー数が不明な場合は、GetCountOfSymbolMember()でメンバー数を求め、その値+1の分のSymbolInformationをワークとして用意し、この関数を呼び出してください。