【发布时间】:2023-04-05 05:10:01
【问题描述】:
我使用这个命令在 Matlab 中创建了一个简单函数的 dll:
mcc -t -L C -W lib:testfunctionLib -T link:lib testfunction.m libmmfile.mlib
简单的函数如下:
function y = testfunction(x)
y = x + 10;
end
我需要通过 c 代码调用 dll。这就是我用来将 dll 函数的计算结果放入文本文件的方法:
#include <windows.h>
#include <stdio.h>
int main()
{
int z = 1;
FILE *Testfile;
typedef int(*BinaryFunction_t) (int);
BinaryFunction_t AddNumbers;
int result;
BOOL fFreeResult;
HINSTANCE hinstLib = LoadLibraryA("testfunctionLib.dll");
if (hinstLib != NULL)
{
AddNumbers = (BinaryFunction_t)GetProcAddress(hinstLib, "testfunction");
if (AddNumbers != NULL)
result = (*AddNumbers) (z);
fFreeResult = FreeLibrary(hinstLib);
Testfile = fopen("Testfile.txt", "a");
fprintf(Testfile, "%i\n", result);
fclose(Testfile);
}
else
{
Testfile = fopen("Testfile.txt", "a");
fprintf(Testfile, "NOT");
fclose(Testfile);
}
}
我的文本文件中总是出现“NOT”,因为 c 代码无法从 dll 中提取函数。为什么这不起作用?获取 dll 函数的 c 代码应该没问题,我用 Visual Studio 中创建的 dll 对其进行了测试。
【问题讨论】:
-
您未能加载库。检查
GetLastError出了什么问题 -
注意:
mcc是 MATLAB 编译器的一部分,用于将 MATLAB 应用程序部署给无权访问 MATLAB 的最终用户。但是,它需要最终用户在他/她的机器上安装 MCR(MATLAB 组件运行时),如果您拥有 MATLAB Compiler 许可证,则可以免费分发。如果您想要真正独立的 C 代码,则应该使用 MATLAB Coder。 -
出于好奇,是否有理由需要手动动态加载库?你能改为链接到库并包含生成的标题吗?
-
尝试不使用 .dll。我不确定c,但在java中它预先添加lib并添加.so后缀,而对于dll只是添加dll后缀。
标签: c matlab dll matlab-compiler matlab-coder