编辑: 梦三石 | 2015-08-08 |
(2)保存好 M文件后 ,切换到 VC环境中新建包 含此 M文件的 shared M - DLL 工程. (3)向工程添加数据交换和算法调用函数. 函数文件经 MATLAB 编译器后 ,其输入输出类 型均为 mxA rray指针.LabV IEW 支持标准 C数据类 型 (包括数值、 数组、 字符串、 指针等 )但不支持 mxA r2 ray,所以必须将 mxA rray转换成标准 C数据才能正 确传递给 LabV IEW ,反之 ,标准 C 数据必须转换成 mxA rray也才能作为 M - DLL 中函数的参数.这两 个工作可分别通过 mxGetPr ( )和mxSetPr ( )或者 memcpy( )来完成. 下面给出本例的数据交换和算法调用代码 ,其他 应用与之类同 #include sinwave. h / /这个头文件与 M文件名相同 #include m_test . h / /这个头文件的名字与工程名相同 #include matlab. h / /包含 mx3 ( )函数的声明 /3 _declspec (dllexport)为VC中DLL声明导出函数的关 键字 ,也可用. def文件指定导出函数. 本例中此函数作为导出函数供 LabV IEW 调用 ,完成数据 交换和算法调用等工作.3 / _declspec ( dllexport) void sine ( double
3 x, double
3 y, int len) { mxA rray
3 tmp =NULL,
3 rslt =NULL;
double
3 t;
int i;
m_testInitialize 此函数由 MATLAB插件自动生成 , 与工程名有关 ,用来初始化库函数. / /给mxA rray实部赋值 tmp =mxCreateDoubleMatrix(1, len,mxREAL) ;
mxSetPr( t mp, x) ;
/ /M文件中的函数转化成 C代码后 ,带了一个前缀 m lf, 参数类型则变为 mxA rray指针 rslt =m lfSinwave ( tmp) ;
/ /获取 mxA rray实部内容 t =mxGetPr( rslt) ;
for( i = 0;
i <
len;
i + + ) y[ i] = t[ i];
/ /终止库函数调用 m_testTerm inate ( ) ;
} (4)编译此工程 ,然后在 LabV IEW 中用 CLF调用该 DLL. 图 2为 LabV IEW 中调用此 M - DLL 中sine函数的程序 框图 ,他相当于求阵列 [ 0: ∏/10: 2∏ ]的正弦值 ,其运行结果 如图 3所示. 图2程序框图 图3运行结果 方法二 :利用 MATLAB计算引擎. MATLAB计算引擎是一系列允许用户在别的程 序中与 MATLAB交互的函数库和程序库.在调用过 程中 ,MATLAB引擎函数库工作在后台 ,MATLAB 通 过它与别的应用程序进行通信.因此将 MATLAB 引 擎函数包装在 DLL中供 LabV IEW 调用 ,就可以实现 LabV IEW 和MATLAB间的数据通讯.下面给出........