Visual FoxPro dynamic-link library (FLL) представляют собой, по сути, DLL, которая содержит вызовы Visual FoxPro API. Вы можете создать базовую структуру DLL в вашей среде разработки и, затем, добавить функции Visual FoxPro, которые вы желаете вызывать. В приведенных ниже разделах описан пример шаблона, для создания шаблонов в C и C++.

Установка шаблона библиотеки

Каждая FLL библиотека Visual FoxPro имеет одну и ту же базовую структуру. Вы можете использоть шаблон структуры, после чего вам нужно будет только добавить код для вашей конкретной процедуры библиотеки.

В шаблоне библиотеки Visual FoxPro имеется пять элементов:

  • Предложение #include.

  • Определение функции.

    Определение функции имеет пустое возвращаемое значение и получает параметр ParamBlk *parm. Для получения более подробной информации о параметре ParamBlk смотрите описание Параметры во внешних библиотеках.

  • Код функции.

  • Структура FoxInfo.

    Функции в FLL общаются с Visual FoxPro через структуру FoxInfo. Visual FoxPro uиспользует FoxInfo для определения имени функции и типа параметров.

  • Структура FoxTable.

    Структура FoxTable представляет собой список указателей, который отслеживает структуры FoxInfo.

Для получения более подробной информации об опредедениях структур FoxInfo и FoxTable посмотрите содержимое файла Pro_ext.h.

Вы потребуются, кроме того, перечисленные ниже файлы:

  • Заголовочный файл Pro_ext.h.

    Вы можете распечатать этот файл для просмотра деклараций функции, определений типов typedefs и структур, используемых в Visual FoxPro API.

  • Файл Winapims.lib.

Оба эти файла размещзены в каталоге Microsoft Visual FoxPro ..\Samples\API.

Образец шаблонов

Для процедур C, вы можете использовать приведенный ниже шаблон:

 CopyCode imageСкопировать код
#include <Pro_ext.h>

void Internal_Name(ParamBlk *parm)
{
// Function code goes here.
}

FoxInfo myFoxInfo[] = {
   {"FUNC_NAME", (FPFI) Internal_Name, 0, ""},
};

FoxTable _FoxTable = {
   (FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Для пароцедур C++, вам необходимо декларировать структуру FoxTable как внешнюю в приведенном ниже шаблоне:

 CopyCode imageСкопировать код
#include <Pro_ext.h>

void Internal_Name(ParamBlk  *parm)
{
// Function code goes here.
}

   FoxInfo myFoxInfo[] = {
      {"FUNC_NAME", (FPFI) Internal_Name, 0, ""},
   };

extern "C" {
   FoxTable _FoxTable = {
      (FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
   };
}

Смотрите также