5

当从 matlab 调用外部 C 库 (DLL) 时,matlab 似乎首先会尝试filename_thunk_pcwinXX.dll在临时目录中生成一个名为(其中 XX 是 32 或 64 取决于操作系统)的 thunk 文件。

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

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

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

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

4

1 回答 1

0

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

thunk DLL 是关于调整调用约定

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

于 2016-07-15T17:01:25.183 回答