All programs that call MATLAB Compiler generated shared libraries have roughly the same structure:
Declare variables and process/validate input arguments.
Call mclInitializeApplication , and test for success. This function sets up the global MCR state and enables the construction of MCR instances.
Call, once for each library, Initialize , to create the MCR instance required by the library.
Invoke functions in the library , and process the results. (This is the main body of the program.)
Call, once for each library, Terminate , to destroy the associated MCR.
Call mclTerminateApplication to free resources associated with the global MCR state.
Clean up variables, close files, etc., and exit.
To see these steps in an actual example, review the main program in this example, triangle.c . m 파일
function [x, y] = sierpinski(iterations, draw) % SIERPINSKI Calculate (optionally draw) the points in Sierpinski's triangle % Copyright 2004 The MathWorks, Inc. % Three points defining a nice wide triangle points = [0.5 0.9 ; 0.1 0.1 ; 0.9 0.1]; % Select an initial point current = rand(1, 2); % Create a figure window if (draw == true) f = figure; hold on; end % Pre-allocate space for the results, to improve performance x = zeros(1,iterations); y = zeros(1,iterations); % Iterate for i = 1:iterations % Select point at random index = floor(rand * 3) + 1; % Calculate midpoint between current point and random point current(1) = (current(1) + points(index, 1))/2; current(2) = (current(2) + points(index, 2))/2; % Plot that point if draw, line(current(1),current(2));, end x(i) = current(1); y(i) = current(2); end if (draw) drawnow; end
triangle.c 프로그램: /*================================================================= * * TRIANGLE.C * * Calculate the points in Sierpinski's triangle, an elementary * fractal. * * This function calls a shared library, libtriangle, created * using MATLAB Compiler. * * Copyright 1984-2007 The MathWorks, Inc. * *=================================================================*/#include /* Include the library specific header file as generated by MATLAB Compiler; * this includes the MCLMCRRT proxy layer header automatically. */#include "libtriangle.h"#include "main_for_lib.h"void usage(const char *name) { printf("Usage: %s [number of points]/n"); exit (-1); } int run_main(int ac, char **av) {/* Input parameters: * * iterations: Number of points to draw in the triangle * draw: If true, draw the triangle in a figure window before returning. */mxArray *iterations = NULL, *draw = NULL;/* The Sierpinski function returns the X and Y coordinates of the points * forming the pattern in the triangle. */mxArray *x = NULL, *y = NULL;/* Default number of iterations */int num_points = 7500;/* Validate the number of inputs */if (ac < 1 || ac > 2) { fprintf(stderr, "Expecting 0 or 1 input(s). Found %d/n", ac); usage(av[0]); return -1; }/* If we have the right number of inputs (1), try to convert the input * string to an integer. */if (ac == 2) num_points = atoi(av[1]);/* Type check on input argument -- atoi() will fail if the input is * not an integer. */if (num_points == 0) { fprintf(stderr, "First argument must be an integer./n"); usage(av[0]); return -2; }/* Call the library intialization routine and make sure that the * library was initialized properly */if( !mclInitializeApplication(NULL,0) ) { fprintf(stderr,"could not initialize the application./n"); return -2; } if (!libtriangleInitialize()) { fprintf(stderr,"could not initialize the triangle library properly/n"); return -3; } else {/* Create the input data */iterations = mxCreateDoubleScalar(num_points); draw = mxCreateLogicalScalar(1);/* Call the library function */mlfSierpinski(2, &x, &y, iterations, draw);/* Display the return value of the library function */printf("Calculated %d points/n", mxGetNumberOfElements(x));/* Block until user dismisses the figure */mclWaitForFiguresToDie(NULL);/* Free the memory used by the return values. */mxDestroyArray(x); x=NULL; mxDestroyArray(y); y=NULL;/* Call the library termination routine */libtriangleTerminate();/* Free the memory used by the input variables */mxDestroyArray(iterations); iterations=0; mxDestroyArray(draw); draw = 0; }/* Nnote that you should call mclTerminate application in the end of * your application. mclTerminateApplication terminates the entire * application. *//* Shut down all MCR instances */mclTerminateApplication();/* Success */return 0; }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: