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

use*_*128 5 c dll matlab loadlibrary thunk

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

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

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

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

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

Ofe*_*lon 0

我最近不得不深入研究同样的问题。完整的技术细节位于链接,但简短的答案是:

\n\n
\n

thunk DLL 是关于调整调用约定的

\n\n

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

\n
\n