【问题标题】:Matlab-generated Dll in CMatlab 生成的 C 中的 Dll
【发布时间】: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


【解决方案1】:

我知道库加载失败,但我没有收到任何错误消息。我还尝试通过 Matlab Coder 构建 dll。我得到了很多不同的文件(c、h 等)和一个名为 testfunction 的 dll 文件。但是包括这个 dll 仍然无法正常工作..

【讨论】:

  • 这真的不是答案,应该是对 am304 所说内容的后续评论。
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多