在Delphi中使用matlab DLL需要做些什么

时间:2014-06-10 13:18:38

标签: matlab delphi dll

我正在开发一个项目,我正在给它一个DLL,它是在matlab中创建的,它的源代码是一个matlab .m文件。我明白为了能够使用matlab .ddl,我需要安装matlab运行时编译器。我做到了这一点。

这是我需要了解的后续步骤。

通过阅读这里的另一篇文章,我可以看到,首先我需要初始化运行时,然后初始化每个DLL。我不确定正确的做法。我已经创建了一个新单元,但我不确定如何完成它,所以我可以使用DLL中包含的功能。

单位代码如下:

unit MatLabIF;

interface

type

    PPAnsiChar = ^PAnsiChar;

    function mclInitializeApplication(A: PAnsiChar; B: Integer): Boolean; cdecl;
    external 'mclbase.dll';

    procedure openMCL;

implementation

uses

Windows,sysUtils,MMSystem,Classes,Dialogs,QuickUSB,Math,StirScanDemoApp;

{------------------------------------------------------------------------------}

procedure openMCL;

begin

    if not(mclInitializeApplication(nil,0)) then showMessage('App failed to open')
    else showMessage('App Opened Correctly')
end;
 {------------------------------------------------------------------------------}

end.

当我尝试运行代码时,我收到了错误消息," mclbase.dll从您的计算机中丢失了#34;,我进入了matlab运行时编译器文件夹,找到了丢失的mclbase.dll并将其复制了进入项目文件夹。

下次我试图运行该程序时,另一个dll丢失了,这是否会继续发生?如何告诉delphi在matlab文件夹中找到它需要的所有dll?我是否需要某种陈述?"使用"像" mcl" ????

简而言之,

如何使用matlab运行时编译器在delphi中使用matlab dll?

1 个答案:

答案 0 :(得分:1)

您需要DLL搜索路径才能找到MATLAB运行时。实现这一目标的一些方法:

  1. 将MATLAB运行时文件夹添加到系统路径。这是一种非常严厉的方法,通常是要避免的。为了您的个人用途,这是最方便的。
  2. 使用SetDllDirectoryAddDllDirectory扩展搜索路径。
  3. 只有在加载程序尝试加载DLL之前可以调用这些函数时,才可以使用选项2。加载时间链接不可能。您可以使用以下技术之一处理:

    • 将代码移动到单独的模块中,并从主机中调用其中一个函数。
    • 切换到与LoadLibrary链接的运行时。
    • 使用与delayed指令链接的延迟加载。

    请注意,变量名称AB的选择很差。不要让代码难以理解。而且,该函数的第一个参数是指向空终止字符串的指针。这是一个字符串数组。使用PPAnsiChar