有没有人知道matlab mex库的生命周期是什么?具体我感兴趣的是:
>有没有办法在调用库之前强制库加载?
图书馆是单身吗还是加载多个实例?
>在调用之前是否有用于初始化的钩子?
>当库卸载清理时,是否有一个析构函数钩子/信号被拦截?
我在这里和网上进行了广泛的搜索,我找不到这些问题的答案.我的问题在初始化时有一些性能成本,如果可能,我想避免这样做,而不需要写一个服务.
解决方法
正如我在评论中提到的,在
Windows中可以实现
DllMain
入口点.这是因为MEX文件只是具有不同扩展名的常规DLL文件.这是一个最小的例子:
testDLL.cpp
#include "mex.h" #include <windows.h> BOOL APIENTRY DllMain(HANDLE hModule,DWORD dwReason,LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: mexPrintf("DLL_PROCESS_ATTACH: hModule=0x%x\n",hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: mexPrintf("DLL_PROCESS_DETACH: hModule=0x%x\n",hModule); break; } return TRUE; } void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) { mexPrintf("Inside MEX-function\n"); }
下面是它的工作原理:
>> mex -largeArrayDims testDLL.cpp >> testDLL DLL_PROCESS_ATTACH: hModule=0xa0980000 Inside MEX-function >> testDLL Inside MEX-function >> clear testDLL DLL_PROCESS_DETACH: hModule=0xa0980000
原文地址:https://www.jb51.cc/c/112448.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。