文書番号: 402577
最終更新日: 1999/03/21
VBArrayBounds 配列の上限と下限を取得します。 VBArrayElement 配列の要素へのポインタを取得します。 VBArrayElemSize 配列の要素のサイズを取得します。 VBArrayFirstElem 配列の最初の要素へのポインタを取得します。 VBArrayIndexCount 配列の要素数を取得します。 /**** サンプルコード *********************************** #include <windows.h> #include "vbapi.h" void LongArray (HAD hadArray) Visual Basic 専用 DLL 関数 機能: VB から配列を受け取り、配列の次元数、1要素のサイズを表示。 配列が LONG 型 の2次元配列の場合は、その全要素に値を代入する。 注意: 特にエラーチェックを行っていないので、VB 側で正しく配列を 渡さないと正常に動作しない。 VB 2.0 用の配列関数を使用しているため、 VB 2.0 以降のバージョンでのみ実行可能 モジュール定義ファイル LARRAY.DEF LIBRARY LARRAY EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE SINGLE HEAPSIZE 1024 EXPORTS WEP PRIVATE LONGARRAY C コンパイルオプション (Visual C++ 1.0 用) CL /ALw /GD リンクオプション (Version 5.61 用) /LIB:"vbapi" /LIB:"libw" /LIB:"ldllcew" /NOD /NOE /PACKC:61440 /ALIGN:16 VB DECLARE 文 Declare Sub LONGARRAY Lib "LARRAY.DLL" (Ar() As Long) VB 配列定義 Global Ar(64, 10) As Long VB 側 呼び出し方法 LONGARRAY Ar() *****************************************************************/ void __export _far pascal LongArray (HAD hadArray) { LONG arBounds; // 配列上限下限値取得のための作業用変数 // 配列上限下限 保存用変数 UINT arBounds1Min, arBounds1Max, arBounds2Min, arBounds2Max; SHORT arIdxCount; // 配列の次元数保存用変数 LPVOID arFirstEl; // 配列の最初の要素を示すポインタ保存用変数 USHORT arElemSize; // 配列の要素のサイズ保存用変数 static char str [120]; // メッセージ出力用バッファ long item=0l; // 各要素に代入する値 UINT i, ii; // カウンタ int idxes[2]; // インデックス配列 long far *lplong; // 各要素を指すポインタ // 配列の次元数の取得 arIdxCount = VBArrayIndexCount (hadArray); // 配列の要素のサイズ取得 arElemSize = VBArrayElemSize (hadArray); wsprintf (str, "配列の次元数\t%d\n 配列の要素のサイズ\t%u", arIdxCount, arElemSize); // 配列の次元数、要素サイズの表示 MessageBox (NULL, str, "ARRAY", 0); if (arIdxCount!=2) return; // 配列が2次元の場合のみ以下の作業を行う if (arElemSize!=4) return; // 要素サイズが4バイトの場合のみ以下の作業を行う // これ以降の処理は、引数 hadArray に LONG 型の2次元配列が渡されている // 場合にのみ有効です。 // 配列上限下限 の取得 arBounds = VBArrayBounds (hadArray, 1); arBounds1Min = LOWORD (arBounds); arBounds1Max = HIWORD (arBounds); arBounds = VBArrayBounds (hadArray, 2); arBounds2Min = LOWORD (arBounds); arBounds2Max = HIWORD (arBounds); // 先頭要素を指すポインタの取得 (使用していません) arFirstEl = VBArrayFirstElem (hadArray); // 全ての要素に値を代入 for (i=arBounds2Min; i<=arBounds2Max;i++) { for (ii=arBounds1Min; ii<=arBounds1Max; ii++) { idxes[0] = i; idxes[1] = ii; // 要素を指すポインタを取得 // 配列の次元の順番が Basic と逆になっていることに注意 lplong = VBArrayElement (hadArray, 2, idxes); // 要素に値を代入 *lplong = ++item; } } return; }
Keywords: KBHOWTO KB402577
Technology: kbAudDeveloper kbVBSearch kbZNotKeyword2 kbZNotKeyword6