无法在本机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)