Интерпретация кода программы в код С++

Создание приложений, библиотек, инсталляторов
Ответить
Аватара пользователя
Oplkill
beginner
beginner
Сообщения: 11
Зарегистрирован: 21 мар 2013, 18:08
Версия LabVIEW: 12.0

Интерпретация кода программы в код С++

Сообщение Oplkill »

Незнал как иначе назвать тему...

Хочу сделать программу в labview, хоть и знаю что это графический "язык программирования", всеже я задался вопросом возможности написании 99% всего кода программы на языке c++, посредством библиотеки из c++(своей собственной).

И так вот в чем вопрос:
1)Как нужно сделать библиотеку написанную на c++, рабочей на Labview?
2)Как её использовать в Labview? (как например в функции библиотеки послать x и y, а на выходе принять новую таблицу массивов)
Аватара пользователя
Oplkill
beginner
beginner
Сообщения: 11
Зарегистрирован: 21 мар 2013, 18:08
Версия LabVIEW: 12.0

Re: Интерпретация кода программы в код С++

Сообщение Oplkill »

Спасибо тебе Jakob Brontfeyn!

Для всех тех кто в танке объясняю пример коротко и ясно(как я понял)(поправьте если неправильно)
Пример dll библиотеки на c++ (visual studio)

Код: Выделить всё

#include "stdafx.h"
#define EXP extern "C" __declspec (dllexport)

EXP int CALLBACK scet(int x, int y)
{
	return x+y;
}
из примера видно, что чтобы dll работала в :labview:, надо присоеденить: #define EXP extern "C" __declspec (dllexport) в заголовок
А новые функции создавать так: EXP void CALLBACK xxx()


Второй этап:

Изображение
Изображение
Изображение
Изображение
Изображение
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Интерпретация кода программы в код С++

Сообщение dadreamer »

В целом вроде верно, только вот в C++ вы объявили функцию как cdecl, а в :labview: вызываете как stdcall. И необязательно делать #define для объявления функции, можно и перед её названием поставить. А вообще, посмотрите вот эту литературу, там есть масса интересных и полезных вещей.
Using External Code In LabVIEW.pdf
(1.76 МБ) 358 скачиваний
Code Interface Reference Manual.pdf
(899.24 КБ) 327 скачиваний
Labview Advanced Course.pdf
(2.45 МБ) 317 скачиваний
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Интерпретация кода программы в код С++

Сообщение mzu2006 »

Насколько код на С++ на самом деле ++? :labview: плохо переваривает C++ классы, нужно писать обертку
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Интерпретация кода программы в код С++

Сообщение dadreamer »

mzu2006 писал(а)::labview: плохо переваривает C++ классы
Я бы сказал, что он их вообще не переваривает, потому что даже функцию с thiscall-соглашением не вызвать из :labview: без wrapper'а, а если работать с классами, то придется постоянно обращаться к самописным библиотекам, даже при использовании классов не напрямую, а по указателям. Я как-то делал обертку для DLL, написанной на C++, в Delphi. Так, кроме конструкторов-деструкторов и обычных функций постоянно приходилось пользоваться ассемблерными вставками для получения/передачи указателя на this. Вообще, не знаю, почему NI до сих пор не смогли внедрить классы в :labview: , ведь они не так сильно отличаются от того же typedef struct.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Интерпретация кода программы в код С++

Сообщение mzu2006 »

dadreamer писал(а):Вообще, не знаю, почему NI до сих пор не смогли внедрить классы в :labview: , ведь они не так сильно отличаются от того же typedef struct.
Бинарная реализация классов в C++ не специфицирована стандартом. Т.е. для бинарной совместимости необходимо либо: ориентироватьтся на конкретный компилятор C++, либо переходить к таким реализациям объектности, где бинарная совместимость гарантируется стандартом. Например, COM. Поддержка COM объектов в LabVIEW реализована
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Создание приложений»