Для интеграции вашей программы с Visual FoxPro, вы можете вызывать процедуры Visual FoxPro API. Эти процедуры API представляют собой функции, которые вы можете вызвать из любой программы, написанной на C или C++, включая файл .ocx или .fll, который даст вам доступ к переменным, операциям управления базами данных и выполнения многих других характерных для Visual FoxPro задач.

В приведенной ниже таблице перечислены общие категории вызовов API, доступных в Visual FoxPro. Для получения более подробной информации об индивидуальных функциях API смотрите описания Процедуры библиотеки API от A до Z или Процедуры библиотеки API по категориям.

Для использования процедур FoxPro API, вы должны включить файл Pro_ext.h, доступный в каиалоге Visual FoxPro API. Этот файл включает в себя прототипы функций и структур, которые позволят вам использовать информацию совместно с Visual FoxPro.

Если вы пишите элемент управления ActiveX, вы должны, кроме того добавить вызовы для инициализации и очистки API.

Чтобы добавить процедуры Visual FoxPro API в ваш объект ActiveX

  1. Используйте  #INCLUDE чтобы включить файл Pro_ext.h среди других требумых заголовочных файлов.

  2. В  Constructor (метод Init) элемента управления вызовите _OCXAPI( ) для инициализации интерфейса в Visual FoxPro с помощью приведенного ниже кода:

     CopyCode imageСкопировать код
    _OCXAPI(AfxGetInstanceHandle(),DLL_PROCESS_ATTACH);
  3. Включите вызов Visual FoxPro API какэто требуется в вашем объекте.

  4. В Destructor (метод Destroy) объекта снова вызовите _OCXAPI( ) для высвобождения процесса, созданного в Constructor, с помощью приведенного ниже кода:

     CopyCode imageСкопировать код
    _OCXAPI(AfxGetInstanceHandle(),DLL_PROCESS_DETACH);

В качестве примера библиотеки .fll, которая включает в себя вызовы Visual FoxPro API, посмотрите на пример программы в каталоге \Api\Samples, который имеет расширение C: EVENT.C, HELLO.C и тому подобные.

Если вы используете вызовы Visual FoxPro API в вашем элементе управления ActiveX, COM-объекте или в библиотеке .fll, код, содержащий вызовы яаляется несовместимым с другими приложениями. Поэтому вам может потребоваться собрать один или более тестов в программе, для определения возможности вызова объекта из Visual FoxPro.

Например, если вы создаете элемент управления ActiveX, используя Microsoft Foundation Classes, вы можете изменить код конструктора элемента управления для включения теста, который предупредит пользователя, если элемент управления вызывается не из Visual FoxPro:

 CopyCode imageСкопировать код
if (!_OCXAPI(AfxGetInstanceHandle(),DLL_PROCESS_ATTACH))
{
   ::MessageBox(0,"This OCX can only be hosted by Visual Foxpro","",0);
      //Здесь вы можете делать все, что угодно в случае, когда хостом не является VFP:
      // вы можете отклонить загрузку или вы можете установить свойство, указывающее,
      // хост не является VFP и элемент управления будет использовать другое средство
      // для достижения требуемой цели.
}

Если вы создаете элемент управления ActiveX, используя Microsoft ActiveX Template Library, используйте приведенный ниже код:

 CopyCode imageСкопировать код
if (!_OCXAPI(_Module.GetModuleInstance(),DLL_PROCESS_ATTACH))
{
   ::MessageBox(0,"This OCX can only be hosted by Visual Foxpro","",0);
      //Здесь вы можете делать все, что угодно в случае, когда хостом не является VFP:
      // вы можете отклонить загрузку или вы можете установить свойство, указывающее,
      // хост не является VFP и элемент управления будет использовать другое средство
      // для достижения требуемой цели.

}

Выбранная вами стратегия зависит от того, как вы предугадаете использование элемента управления. Например, если вы определили, что элемент управления используется вне Visual FoxPro, вы можете установить флаг, который вы проверяете на каждой точке в элементе управления, в которой вы вызываете Visual FoxPro API. Если флаг указывает, что элемент управления находится вне Visual FoxPro, вы можете разветвить вызов API на альтернативное средство, позволяющее выполнить аналогичную задачу.

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