Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab的C包装器有问题_C_Matlab_Dll_Wrapper - Fatal编程技术网

Matlab的C包装器有问题

Matlab的C包装器有问题,c,matlab,dll,wrapper,C,Matlab,Dll,Wrapper,我目前正面临着一个显然很愚蠢的问题,但我只是不知道什么是错的,或者更好,我认为它是错的,但我被告知它应该工作 我有一个Matlab脚本myscript.m,它需要使用一个C编程函数myfunc.C,而myfunc.C又被编译或存在于一个库mylib.dll中。为了让myscript.m访问和执行myfunc.c,还有一个myfunc.m Matlab脚本,它在myscript.m中被调用。但是,myfunc.m是一个完全空的文件,除了一些没有特定格式或模式的注释。所有这些文件都是给我的,我被告知

我目前正面临着一个显然很愚蠢的问题,但我只是不知道什么是错的,或者更好,我认为它是错的,但我被告知它应该工作

我有一个Matlab脚本myscript.m,它需要使用一个C编程函数myfunc.C,而myfunc.C又被编译或存在于一个库mylib.dll中。为了让myscript.m访问和执行myfunc.c,还有一个myfunc.m Matlab脚本,它在myscript.m中被调用。但是,myfunc.m是一个完全空的文件,除了一些没有特定格式或模式的注释。所有这些文件都是给我的,我被告知Matlab应该正确执行myfunc.c,因为myfunc.m是一个包装器

我遇到的问题是,它当然不起作用。当我执行myscript.m中的行时,该行显示:

output1 = myfunc(input1, input2);
我得到Matlab错误,说我试图执行一个脚本作为一个函数。在我看来,这是正确的,因为我正在向声明为两者都没有的对象发送输入和请求输出,因为myfunc.m是空的,但注释不是代码

我认为Matlab没有办法知道我想要访问mylib.dll中的C代码。我也没有头文件mylib.h,因此可以使用loadlibrary在Matlab中加载库

我的问题是,根据目前的描述,这项执行是否可行?有没有办法让它发挥作用,或者我错过了什么?一种可能性是,这是一种旧的包装格式,目前已不再有效

如果有人知道任何事情或有任何建议,他们将不胜感激。谢谢


Hugo

听起来myfunc.c是一个mex文件。尝试使用mex命令在Matlab中编译它。dll扩展可能是旧版本的matlab。

您使用过吗?您需要一个.h文件,但如果您知道函数的原型,则可以轻松地重新创建该文件。

您是否可以将myfunc.m移到一边,甚至将其删除?我已经尝试过,但我得到了以下预期结果?错误消息:类型为“double”的输入参数的未定义函数myfunc.m。。根据我的推理,这是可以的,因为Matlab仍然不知道它必须以某种方式链接到.dll;因此,它只看到一个函数调用,当它查找它时,它什么也找不到。我想我解释错了。没有实际的myfunc.c,只有一个名为myfunc的c编码函数。通常应该有一个实际名称为myfunc.c的文件。但是,我没有。因此,我无法自己编译它,需要使用某种方式访问.dll。如果我理解正确,您有一个mylib.dll文件和一个myfunc.m文件,其中没有matlab命令-纯注释。一种可能性是mylib.dll是mex文件的旧版本:尝试在matlab中将其作为函数调用,看看会发生什么:>>res=mylibinput1,input2;。你从哪里得到这些文件的?你下载了吗?您的防火墙/防病毒软件是否可能删除了一些您试图下载的文件?你能得到源文件吗?我已经试过了,但它仍然不能识别mylib.dll为任何脚本、函数或变量。mylib.dll和myfunc.m是否共享相同的名称也没有任何影响。我从一位同事那里得到了这些文件,他声称它可以正常工作。至少我们拥有的文件集是相同的,但可能在其他地方有一些隐藏的编译库?我认为如果我们想解决这个问题,需要回答的主要问题是:您的代码是旧的mex函数,还是对加载的共享库的调用。为了尝试找出这个问题,请下载并查看dll的依赖项。查看从dll中提取的函数列表:您是否看到了一个名为mexFunction或myfunc的函数???好的!您的dll是一个旧版本的mex函数,我不记得他们在哪个版本将扩展名从dll更改为mexw32。但是,您需要确保libmex.dll和libmx.dll位于LD_LIBRARY_路径中。确保在matlabroot\bin\win32中获得这些DLL