gpt4 book ai didi

c - matlab生成的thunk文件的用途是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:09:06 27 4
gpt4 key购买 nike

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

在matlab docs中,它提到这个文件是外部DLL和Matlab之间的接口(interface),所以它不包含原始外部DLL的任何其他数据。

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

当从其他 C/C++ 程序而不是 matlab 程序调用时,我所有的库函数都能完美运行。

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

最佳答案

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

The thunk DLL is about adjusting calling conventions

The thunk function boolint32int32doubleThunk receives its arguments in the Matlab calling convention: all arguments are passed consecutively on the stack, untyped and aligned on sizeof(size_t) (64 bytes in x64) boundaries. It also receives a function pointer to the actual DLL export, and after copying the arguments to local typed variables – calls this function with its native calling convention.

关于c - matlab生成的thunk文件的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15328687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com