matlab生成的thunk文件的目的是什么?

时间:2013-03-10 22:48:29

标签: c matlab dll loadlibrary thunk

当从matlab调用外部C库(DLL)时,似乎matlab将首先尝试在临时目录中生成名为filename_thunk_pcwinXX.dll的thunk文件(其中XX是32或64依赖于OS)

在matlab文档中,它提到该文件是外部DLL和Matlab之间的接口,因此它不包含原始外部DLL的任何其他数据。

问题是,我编写了一个库,在运行时可能会调用其他库,matlab总会给我一些奇怪的结果,甚至在库调用某些库时崩溃(不是全部,我的库和其他库都在这里64位DLL)。

当从其他C / C ++程序而不是matlab调用时,我的所有库函数都可以正常工作。

我只是想知道,为了让matlab正常工作,我的库在运行时调用的其他库是否也需要获取某种thunk文件?我简直不敢相信,但我不知道matlab如何处理外部库的确切方法。

1 个答案:

答案 0 :(得分:0)

我最近不得不dig into the same question。完整的技术细节在链接,但简短的答案是:

  

thunk DLL是关于调整调用约定

     

thunk函数boolint32int32doubleThunk接收其参数   Matlab调用约定:所有参数都是连续传递的   在堆栈上,无类型并在sizeof(size_t)上对齐(x64中为64字节)   边界。它还接收一个指向实际DLL的函数指针   导出,并将参数复制到本地类型变量后 -   使用其本机调用约定调用此函数。