无法在本机x32共享库和matlab之间封送字符**
我试图使用无法在本机x32共享库和matlab之间封送字符**,matlab,shared-libraries,marshalling,native,loadlibrary,Matlab,Shared Libraries,Marshalling,Native,Loadlibrary,我试图使用loadlibrary和calllib从matlab调用本机共享库中的函数,但无法获取从库中分配为char**的字符串 以下是本机库的(简化的)代码: #include <malloc.h> #include <string.h> #define DllExport __declspec(dllexport) DllExport __int32 __stdcall MyFunction1() { return 42; } DllExport __in
loadlibrary
和calllib
从matlab调用本机共享库中的函数,但无法获取从库中分配为char**的字符串
以下是本机库的(简化的)代码:
#include <malloc.h>
#include <string.h>
#define DllExport __declspec(dllexport)
DllExport __int32 __stdcall MyFunction1()
{
return 42;
}
DllExport __int32 __stdcall MyFunction2(__int32 handle, const char* format, char** info)
{
*info = _strdup(format);
return handle;
}
从原型
子函数中可以看到,句柄
被封送为int32
,格式
为cstring
和info
为stringPtrPtr
。这是默认情况下perl脚本从“MyDll.h”创建的内容,也是本文建议的内容
我尝试了许多其他封送处理类型,但不知道如何获得info
的正确值
注意:这里没有报告,但是本机库还定义了一个函数来释放为info
参数分配的内存。我的Matlab版本是7.2.0.232上次我发现指针类型的输入参数没有修改到位,而是返回了附加的输出参数,其中包含任何指针类型输入的副本以及任何更改
您可以通过以下方式看到这一事实:
>> libfunctions MyDll -full
Functions in library MyDll:
[int32, cstring, stringPtrPtr] MyFunction2(int32, cstring, stringPtrPtr)
奇怪的是,当我在最新的R2013a上再次尝试时,输入参数确实被修改了。从那以后一定发生了变化:)
因此,在您的情况下,您应该致电:
info = libpointer('stringPtrPtr',{''});
[val,~,info2] = calllib('MyDll', 'MyFunction2', 666, 'kikou', info)
并检查输出info2
info = libpointer('stringPtrPtr',{''});
[val,~,info2] = calllib('MyDll', 'MyFunction2', 666, 'kikou', info)