АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Структура DLL

Прочитайте:
  1. II Структура и функции почек.
  2. А. Классификация, структура и функции
  3. АЛЕКСИТИМИЯ И ПСИХОСОМАТИЧЕСКАЯ СТРУКТУРА
  4. Антигенная структура
  5. Антигенная структура
  6. Антигенная структура бактерий. Групповые, ввдовые, типовые антигены. Перекрестнореагируюшие антигены. Антигенная формула.
  7. Антигенная структура вирусов гриппа и ее изменчивость, роль в эпидемическом и пандемическом распространении гриппа. Механизмы естественного и приобретенного иммунитета.
  8. Антигенная структура и классификация Кауфмана-Уайта
  9. Антигены микроорганизмов. Антигенная структура бактерий. Типовые, видовые, групповые антигены. Протективные антигены. Перекрёстно-реагирующие антигены, значение.
  10. Антигены: структура, классификация, характеристика.

В DLL, вызываемой из MatLab'a, обязательно должна присутствовать экспортируемая функция mexFunction. Вот её прототип:

void __cdecl mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );

Эта mexFunction аналогична функции main( ) в обычных С-программах, т.е. с нее начинается выполнение Вашего кода. Рассмотрим параметры этой функции.
Общий вызов MatLab-функции выглядит так:

[outParam1, outParam2, outParam3] = mlFunc(inParam1, inParam2) ,

где inParam1, inParam2 - входные параметры,
а outParam1, outParam2, outParam3 - выходные параметры.
При этом число и тех, и других параметров для одной и той же функции может быть разным. Так как Ваша DLL-функция должна работать так же, как и любая MatLab'овская, то при её выполнении Вы должны знать, сколько пользователь задал входных, а сколько выходных параметров. Для служат параметры

  • int nlhs (количество ВЫХодных параметров)
  • int nrhs (количество ВХодных параметров)

Сами параметры передаются в массивах

  • plhs (ВЫХодные параметры)
  • prhs (ВХодные параметры)

Эти параметры имеет тип mxArray*.
mxArray - это тип данных, с помощью которого из MatLab'a передаются параметры всех типов - целые числа, дробные числа, комплексные числа и т.п.
Существует ряд функций для работы с этип типом, например
bool mxIsChar(const mxArray *array_ptr)указывает, является ли данный mxArray строкой, или нет,
mxArrayToString возвращает строку, содержащуюся в mxArray'е,
double *mxGetPr(const mxArray *array_ptr)возвращает указатель на первый элемент массива, содержащийся в параметре, и т.п.
Все эти функции подробно описаны в Help'е Матлаба.
Функция void mexErrMsgTxt(const char *error_msg) возвращающает сообщение об ошибке в командное окно MatLab'а. Эта функция прерывает работу DLL.

Массив выходных параметров пуст в начале работы. Вы должны заполнть каждый выходной парметр, создав переменную типа mxArray c помощью функций MatLab'а. Например, чтобы вернуть в первом выходном параметре строку 'Hello, world!!!', Вы должны написать следующую строчку:
plhs[0] = mxCreateString("Hello, world!!!"); Для каждого типа из MatLab'а существует отдельная функция:
для чисел это mxCreateDoubleMatrix,
для строк - mxCreateString и т.п.
После преобразования некоторых входных параметров Вы должны освободить указатели на преобразованные типы с помощью функции mxFree. Например, с помощью функции mxArrayToString Вы получаете указатель на char, являющийся обычной С-строкой. Эту строку Вы и должны освободить с помощью mxFree. Таким образом, общий порядок действий при работе функции следующий:

1. Проверить количество входных и выходных параметров, если эти количества неправильные, то вернуть сообщение об ошибке.

2. Проверить, те ли типы переданы во входных параметрах с помощью функций mxIsChar, mxIsDouble, mxIsComplex и т.п. Действительно, если Вы ожидаете, что Вам в первом параметре передадут строку, а Вам передадут комплексное число, то ничего хорошего такая функция не насчитает.

3. Преобразовать параметры в обыкновенные типы C/C++ с помощью функций mxGetPr, mxArrayToString и т.п.

4. Произвести необходимые действия с этими парметрами

5. Заполнить выходные параметры.

6. При необходимости освободить занимаемую память с помощью функции mxFree.


Необходимо также отметить, что кроме выполнения вычислительных операций, Вы можете вызывать функции WinAPI.

Порядок создания dll-файла в Visual C++, вызываемого из MATLAB:

1. File->New
Откроется диалог "New" вкладка "Projects":

o выбираем тип создаваемого проекта: Win32 Dynamic-Link Library

o заполняем Project Name: {step1}
Location: {указываем путь к нужной директории}

2. File->New
Откроется диалог "New" вкладка "Files":

o выбираем тип создаваемого файла: C++ source file

o заполняем File Name: {step1}

3. Скопировать в директорию проекта файл matlab.lib (прилагается)

4. Добавить скопированный файл к проекту:
Project->Add ToProject->Files-> matlab.lib

5. Работа с С++-ым файлом, входящим в проект:
обязательно включить следующие хедера:

6. #include <windows>7. #include <mex.h>8. #include <matrix.h>9. ...10. (Далее пишем нужный код)11. ...

12. Добавить к проекту файл {step.def}:

o File->New: откроется диалог "New" вкладка "Files":

o выбираем тип создаваемого файла: text files

o заполняем File Name: {step1.def}

13. Открыть {step.def} и заполнить его:

14. LIBRARY "{step1}"15. EXPORTS16. mexFunction

17. Tool->Options->Вкладка "Directories" включить путь:

18. С:\MATLAB\extern\include

19. Project->Settings: Output file name: {step1.dll}

20. F7 (Build) -> создастся файл {step1.dll}

21. Открываем MATLAB

22. File->Set Path: указываем путь к созданному dll-файлу

23. C командной строчки MATLAB:
>>{step1} а выполнится нужный С++-ный код.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


#$Методичка по Matlab

 


# Вещественныечисла.

$ Вещественные числа.

+ 0010:0010

# Операциинадвещественнымичислами.

$ Операции над вещественными числами.

+ 0010:0020

# РабочеепространствосистемыMATLABиеёкомандноеокно.

$ Рабочее пространство системы MATLAB и её командное окно.

+ 0010:0030

# Элементарныематематическиефункции.

$ Элементарные математические функции.

+ 0010:0040

# КомплексныевычислениявсистемеMATLAB.

$ Комплексные вычисления в системе MATLAB.

+ 0010:0050

# МассивычиселвсистемеMATLAB.

$ Массивы чисел в системе MATLAB.

+ 0010:0060

# Синтаксисоперацийсмассивами.

$ Синтаксис операций с массивами.

+ 0010:0070

# Взаимныепреобразованиявекторовиматриц.

$ Взаимные преобразования векторов и матриц.

+ 0010:0080

# МногомерныемассивывсистемеMATLAB.

$ Многомерные массивы в системе MATLAB.

+ 0010:0090

# Функциидляработысмассивами.

$ Функции для работы с массивами.

+ 0010:0100

# Вычислениясмассивами.

$ Вычисления с массивами.

+ 0010:0110

# Глава2.

$ Глава 2.

# Построениедвумерныхграфиковфункций.

$ Построение двумерных графиков функций.

+ 0020:0010

# Оформлениеграфиковфункций.

$ Оформление графиков функций.

+ 0020:0020

# Трёхмернаяграфика.

$ Трёхмерная графика.

+ 0020:0030

# Положениекамерыивращениетрёхмерныхграфиков.

$ Положение камеры и вращение трёхмерных графиков.

+ 0020:0040

# СохранениевфайлахипередачавдругиепрограммыграфическихизображенийMA...

$ Сохранение в файлах и передача в другие программы графических изображений MA ...

+ 0020:0050

# Показпроизвольныхрастровыхизображений.

$ Показ произвольных растровых изображений.

+ 0020:0060

# Глава3.

$ Глава 3.

# Понятияфункцииисценария.

$ Понятия функции и сценария.

+ 0030:0010

# СинтаксисопределенияивызоваM-функций.

$ Синтаксис определения и вызова M-функций.

+ 0030:0020

# Конструкцииуправления.

$ Конструкции управления.

+ 0030:0030

# ПроверкавходныхпараметровивыходныхзначенийM-функции.

$ Проверка входных параметров и выходных значений M-функции.

+ 0030:0040

# Видимостьимёнпеременныхиимёнфункций.

$ Видимость имён переменных и имён функций.

+ 0030:0050

# РазработкаиотладкаM-функций.

$ Разработка и отладка M-функций.

+ 0030:0060

# Массивысимволов.

$ Массивы символов.

+ 0030:0070

# Массивыструктур.

$ Массивы структур.

+ 0030:0080

# Массивыячеек.

$ Массивы ячеек.

+ 0030:0090

# Чтениеизаписьфайловданных.

$ Чтение и запись файлов данных.

+ 0030:0100

# Глава4.

$ Глава 4.

# ГрафическиеокнасистемыMATLABиэлементыуправления.

$ Графические окна системы MATLAB и элементы управления.

+ 0040:0010

# Созданиеосновныхэлементовуправления.

$ Создание основных элементов управления.

+ 0040:0020

# СозданиеграфическогообъектаAxes.

$ Создание графического объекта Axes.

+ 0040:0030

# Callbackфункции.

$ Callback функции.

+ 0040:0040

# Глава5.

$ Глава 5.

# Объектыиклассы.Переопределениеопераций.

$ Объекты и классы. Переопределение операций.

+ 0050:0010

# НаписаниерасширенийMATLABнаязыкеC.

$ Написание расширений MATLAB на языке C.

+ 0050:0020

# ВызовизMatLab'акода,написанногонаC/C.

$ Вызов из MatLab'а кода, написанного на C/C++.

+ 0050:0030

# МетодичкапоMatlab

$ Методичка по Matlab


Дата добавления: 2015-01-18 | Просмотры: 791 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.034 сек.)