Avant_Guard писал(а):1. Непонятно как туда включить код *.c сгенерированный в LabView.
Поясните пожалуйста по пункту 1...
После подключения всех необходимых входов/выходов щелкаете правой кнопкой мыши по CIN'у и выбираете пункт, отмеченный на рисунке ниже. Потом открываете получившийся файл и вставляете его содержимое в свой проект на Си. Приведу пример кода:
Код: Выделить всё
/* CIN source file */
#include "extcode.h"
/* lv_prolog.h and lv_epilog.h set up the correct alignment for LabVIEW data. */
#include "lv_prolog.h"
/* Typedefs */
typedef struct {
LVBoolean status;
int32 code;
LStrHandle source;
} TD1;
#include "lv_epilog.h"
MgErr CINRun(int32 *Num1, int32 *Num2, int32 *arg1, TD1 *errorIn);
MgErr CINRun(int32 *Num1, int32 *Num2, int32 *arg1, TD1 *errorIn)
{
/* Insert code here */
return noErr;
}
Там, где написано /* Insert code here */, пишете свой код, который должен выполняться при запуске. Можете добавить для многопоточности это:
Код: Выделить всё
CIN MgErr CINProperties(int32 query, void *data)
{
switch (query) {
case kCINIsReentrant:
*(Bool32 *)data = TRUE;
return noErr;
}
return mgNotSupported;
}
Вообще, в мануалах, которые уже здесь упоминались, всё это есть (правда, по-английски) и не только это.
update: Вижу, уже сами разобрались, судя по вложенному коду... Объявления функций лучше включить в блок extern "C" { ... }. Вместо return noErr; наверное надо возвращать ошибку, произошедшую в том или ином случае, а отсутствие ошибки возвращать в самом конце, при успешном выполнении всех функций. И зачем такие сложные кластеры с таким большим количеством элементов? Может, как-то упростить? В LabVIEW-то ими управлять просто, а в Си придётся помучаться. Ещё зря удалили #include "lv_prolog.h" и #include "lv_epilog.h", они обеспечивают правильное выравнивание структур, чтобы LabVIEW потом "понял", как следует распознавать данные.