delphi如何调用matlab函数?(100分)

  • 主题发起人 主题发起人 gdhw
  • 开始时间 开始时间
G

gdhw

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想调用matlab的函数,在matlab中用mcc -B sgl -t -W libhg:hw -T link:lib myfun将
编写好的myfun.m(里面函数function myfun(x,y))转为hw.dll,然后在delphi中调用,但在delphi中应用却说找不到
myfun?请问是怎么回事? 
 
下面这篇帖子,希望对你有帮助.
如何在delphi中调用.m文件?
在VC中利用Matcom的Visual MatrixLib将Matlab程序做成标准的Windows DLL,在Delphi中可以进行调用,
通过函数的输入、输出参数进行数据交换,通过实验已经调试成功。
具体的步骤和注意事项如下:
在VC中新建一个空的Windows Dynamic-link Library工程,取名为MotorDSP。在工程中加
入一个c/c++ source file,取名为main.cpp,在第一行写下这句话“#include ”,
注意include的路径。再在这个工程里添加“v4501v.lib”。再在工程中添加一个文本
文件,取名为MotorDSP.def,一个def文件的标准格式如下:
LIBRARY MotorDSP
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
后接要输出的函数名即可,不需要完成的输入、输出声明。在main.cpp中对要输出的
函数进行声明和具体的实现,注意函数的声明一定要以WINAPI开头。例如
WINAPI int fft(…) {};
在Delphi中这样声明一个DLL中的函数:
Function (procedure) fft(…) : integer;
stdcall;
external ‘MotorDSP.dll’ name ‘fft’;

注意: ①一定要用stdcall;

②DLL文件的路径;
③函数的大小写一定要和在VC中声明的一样。
参数传递中最好不要使用string类型,数组的传递通过指向数组的指针进行,例如:
Typedo
ubleArray : array ofdo
uble;

PdoubleArray : ^DoubleArray;

Var data : PdoubleArray;

begin

Getmem(data, n×sizeof(double));

Data := I;

……;
freemem(data);

在VC中如何把得到的数组指针转换到MatrixLib所认的矩阵形式,请看
Matrix User’s Guide。
 
你说的方法我在网上找到过,但太空了,我无法实现。针对我的方法(用MCC)你有什么
建议?[?]
 
非常简单:
var result:string;
matlab:variant;
begin
matlab =creatoleObject("Matlab.Application");
var x=Edit1.Text;
result=matlab.Execute(x);
即可调用matlab,且可将edit1.text的*.M文件的内容,
调入后台matlab,返回结果至result中。
 
后退
顶部