Программный Файл: ...\Samples\Solution\Toledo\ComArray.scx

В данном примере показывается, как надежно (Strongly Typed) передавать Массивы в Сервер COM при помощи стандартной функции COMARRAY. Указанный сервер COM выполняет вычисления или изменения элементов переданного Массива. В клиентской Форме используется команда DIMENSION для определения размерности передаваемого массива, в которой указывается опция AS, определяющая соответствующий тип элементов рассматриваемого массива (надежная типизация).

В рассматриваемом примере используется сервер COM, который создан в системе Visual FoxPro. При этом также демонстрируется использование Декларации используемых Элементов, которая определяет Типы передаваемых массивов, которые, в свою очередь, должны соответствовать типам параметровByRef, объявленных в Библиотеке Типов COM (Type Library).

При запуске данного примера, пользователю задается Запрос на Регистрацию указанного Сервера COM. Данный сервер COM исключается из Реестра после завершения работы данного Примера.

Для передачи Матрицы, как строго типизированного массива, в Сервер COM:

  • В тестовой Форме Примеры, введите требуемое значение в Матрицу, и нажмите кнопку Determinant (Определитель).

Сервер COM вычисляет Определитель рассматриваемой Матрицы при помощи метода Редукции Гаусса-Джордана.

Дополнительную информацию смотрите в разделах: COMARRAY( ), функция и DIMENSION, команда.

Передача строго типизированных массивов.

Следующий фрагмент программного кода использует команду DIMENSION...AS, которая декларирует строго типизированный массив, который используется в пользовательском Методе: CallCOMServer:

  CopyCode imageКопировать Код
DIMENSION laMatrix(ThisForm.Matrixdim, ThisForm.Matrixdim) AS Double

Данный Массив передается "по-ссылке" в рассматриваемый сервер Visual FoxPro COM с помощью функции COMARRAY( ):

  CopyCode imageКопировать Код
* Instantiate COM server.
loMatrixCalc = CREATEOBJECT("VFPCOMArray.COMARRAYDemo")
* Array is one based and is passed by reference.
COMARRAY(loMatrixCalc,11)
* Pass array to COM server by reference "As Double".
lnResult = loMatrixCalc.Determinant(@laMatrix)

Передача параметров COM "по-ссылке".

В рассматриваемом примере, используется пользовательский метод RegisterCOMServer, который содержится в Сервере Visual FoxPro COM, компилируется и регистрируется "на-лету", при выполнении Примера. Рассматриваемый программный Код сервера COM иллюстрирует Синтаксис декларации строго типизированных массивов, передаваемых в данный Сервер. При этом, в соответствующей Библиотеке Типов COM выполняется следующая Декларация исполняемого Метода Вычисления Определителя Матрицы:

  CopyCode imageКопировать Код
FUNCTION Determinant(mat[] AS Double @) AS Double

Указанный массив корректно записывается в Библиотеку Типов как строго типизированный массив. Специальный значек (@) показывает, что принимаемый массив передается "по-ссылке" (ByRef), в Библиотеке Типов.

См. также