1

Тема: Внешние функции

Добрый день! Подскажите, пожалуйста, как подключить функцию из внешнего модуля?

2

Re: Внешние функции

Здравствуйте!
Опишите, пожалуйста, более подробно, что вы имеете в виду. В каком виде функция и в целом для чего предназначается? Модуль – это dll файл или что-то другое?

3

Re: Внешние функции

Модуль - это "*.c"-файл. Необходимо использовать функцию, описанную в нём, в проекте Формат Про. Можем ли мы это сделать?

4

Re: Внешние функции

Да, конечно. Элементы функций вычисления и прорисовки имеют ряд полей свойств, объединённых в группу Внешний код. Это как раз механизм, позволяющий заменить автоматически создаваемый кодогенератором программный код вашим.
Далее возможны разные варианты. Можно отказаться от генерации пролога и эпилога функции и полностью задать свой вид её программного кода с вызовом интересующей Вас внешней функции и размещением в начале Вашего кода

#include "ваш_файл"

на внешний *.h или *.c файл.
Или сохранить пролог и эпилог функции САПР, а include на внешний файл разместить в прологе всего Paint.c файла, указав это в настройках кодогенератора в закладке Файлы в группе Paint.h/Paint.c .

5

Re: Внешние функции

Спасибо за помощь! У нас получилось. Единственная просьба: в справочном пособии ничего не сказано о внешних функциях, не могли бы вы добавить в него описание их использования?

6

Re: Внешние функции

Вам спасибо! Постараемся скоро это сделать.

7

Re: Внешние функции

Еще один вопрос. Как нам нарисовать произвольный (в том числе невыпуклый) закрашенный многоугольник?

8

Re: Внешние функции

С помощью полосного или веерного полигонов, или их комбинацией.

9

Re: Внешние функции

Добрый день.
Не могли бы вы помочь с этим же вопросом. Как после этих действий:

Бороденко Олег пишет:

Можно отказаться от генерации пролога и эпилога функции и полностью задать свой вид её программного кода с вызовом интересующей Вас внешней функции и размещением в начале Вашего кода

#include "ваш_файл"

на внешний *.h или *.c файл.

Можно вызвать функцию описанную в подключенном *.с файле?

10

Re: Внешние функции

Здравствуйте!
Да, на месте "ваш_файл" может быть указан путь к файлу с любым расширением или без него. Важно, что при компиляции строка

#include "ваш_файл"

будет полностью заменена содержимым вашего файла. При этом, вставляемый файл, естественно, должен содержать и тело функции САПР, программный код которой вы подменяете своим.

11

Re: Внешние функции

Тело функции САПР имеет какую-то структуру? Можно какой-нибудь простейший пример *.c файла, который можно будет подключить к проекту?

12

Re: Внешние функции

Возьмём для примера демонстрационный проект Barrel. Ссылка на него имеется в окне САПР Начальная страница. Проект включает в себя две функции прорисовки. Остановимся на DrawScaleUnitTop. После кодогенерации проекта в файле Paint.c функция будет иметь вид:

void DrawScaleUnitTop(
   int32 iy,     /* смещение по Y */
   int32 inumber)     /* отображаемое число */
{

}

Программный код тела функции опустим, он не имеет значения, важен её пролог и эпилог. Такой вид позволит созданному кодогенератором программному коду скомпилироваться, а начинку функции вы укажите свою такой, какая вам необходима.


Теперь, что вам нужно сделать. Выделите в проекте САПР в окне Функции функцию прорисовки или вычисления, которую вы хотите подменить. В окне Свойства в группе Внешний код поле Создание установите в значение Создавать, а поле Пролог, эпилог в значение Не добавлять. После этого в поле Программный код задайте текст

#include "function.c"

Имя файла function.c может быть любым, а также содержать абсолютный или относительный путь перед ним.
Создайте файл с именем function.c и разместите его в папке, куда вы выполняете кодогенерацию. Т.е. он должен лежать рядом с файлом Paint.c, который будет ссылаться на него. В файле вы можете размещать любой нужный вам программный код. Важно, чтобы там также находился пролог и эпилог функции САПР, свойства которой вы только что изменили. Получить их можно, например, выполнив кодогенерацию, установив перед этим поле свойств функции Пролог, эпилог в значение Добавлять. В файле Paint.c при этом будет создан программный код вашей функции без содержимого, только её пролог и эпилог. Скопируйте их в файл function.c.
В результате после кодогенерации в файле Paint.c вместо вашей функции будет находиться текст

#include "function.c"

а в файле function.c уже сама функция со всем тем содержимым, которое вы заходите в неё добавить.