在Delphi中使用MatlabDLL需要做什么
我正在做一个项目,在那里我得到了一个DLL,它是在matlab中创建的,它的源代码是一个matlab.m文件。我知道要使用matlab.ddl,我需要安装matlab运行时编译器。我已经这样做了 这是我需要知道的下一步 通过阅读本文中的另一篇文章,我可以看到,首先我需要初始化运行时,然后初始化每个DLL。我不确定这样做的正确方法。我已经做了一个新的单元,但我不确定如何去完成它,以便我可以使用DLL中包含的函数 单位代码如下:在Delphi中使用MatlabDLL需要做什么,matlab,delphi,dll,Matlab,Delphi,Dll,我正在做一个项目,在那里我得到了一个DLL,它是在matlab中创建的,它的源代码是一个matlab.m文件。我知道要使用matlab.ddl,我需要安装matlab运行时编译器。我已经这样做了 这是我需要知道的下一步 通过阅读本文中的另一篇文章,我可以看到,首先我需要初始化运行时,然后初始化每个DLL。我不确定这样做的正确方法。我已经做了一个新的单元,但我不确定如何去完成它,以便我可以使用DLL中包含的函数 单位代码如下: unit MatLabIF; interface type
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”,我进入matlab runtime complier文件夹,找到缺少的mclbase.dll并将其复制到项目文件夹中
下次我试图运行程序时,另一个dll丢失了,这种情况还会继续发生吗?如何让delphi在matlab文件夹中查找它所需的所有dll?我是否需要在“使用”部分中添加一些类似“mcl”的说明
总之,
如何使用matlab运行时编译器在delphi中使用matlab dll 您需要DLL搜索路径才能找到MATLAB运行时。实现这一目标的一些方法:
SetDllDirectory
或AddDllDirectory
扩展搜索路径李>
只有在加载程序尝试加载DLL之前可以调用这些函数时,才可以使用选项2。这对于加载时间链接是不可能的。您可以使用以下技术之一处理此问题:
- 将代码移动到单独的模块中,并从主机调用其中一个函数
- 切换到运行时链接,使用
LoadLibrary
- 使用带有
指令的延迟加载链接delayed
请注意,变量名
A
和B
的选择较差。不要让代码难以遵循。此外,该函数的第一个参数是指向以null结尾的字符串的指针。这是一个字符串数组。使用PPAnsiChar
您可以将包含matlab DLL的目录添加到您的系统路径环境变量中。我觉得在单元代码的“使用”部分应该有一个条目。不要混淆Delphi使用
指令和DLL搜索路径。这些事情之间的关联不能少。您还应该避免使用无意义的参数名称。是什么让你选择了A
和B
?函数为bool mclinitializapplication(常量字符**选项,整数计数)代码>。一个结果是,在Delphi代码中,第一个参数应该是PPAnsiChar
。我觉得它们相关的原因是,例如,uses部分中的“QuickUSB”条目允许我从QuickUSB库调用函数。你能解释一下区别吗?我不认为我使用的是加载时间链接,虽然我不完全确定这意味着什么,但你是说在应用程序启动后立即加载dll吗?因为我没有这样做,我可以随时打开matlab运行时,应用程序并不依赖于它。您使用的是加载时链接。这就是使用外部
指令得到的结果。除非您添加延迟
。如果您不确定加载时间链接是什么,很容易找到。你只需要把它输入一个网络搜索引擎。好的,谢谢你的回答,大卫,我想我需要学很多东西才能让它发挥作用。出于兴趣,如果我真的决定将matlab runtime文件夹添加到系统路径中,这意味着什么,将文件夹放在项目目录中?不,您不会移动任何文件。您可以修改名为PATH
的系统环境变量。shell提供了一个用于设置环境变量的UI,但是我使用一个名为Rapid Environment Editor的工具来实现这一点?它是否知道如何查找文件系统以找到它需要的内容?