加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Matlab Mex图书馆的生命周期

发布时间:2020-12-16 03:07:35 所属栏目:百科 来源:网络整理
导读:有没有人知道matlab mex库的生命周期是什么?具体我感兴趣的是: 有没有办法在调用库之前强制库加载? 图书馆是单身吗还是加载多个实例? 在调用之前是否有用于初始化的钩子? 当库卸载清理时,是否有一个析构函数钩子/信号被拦截? 我在这里和网上进行了广泛
有没有人知道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%xn",hModule);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        mexPrintf("DLL_PROCESS_DETACH: hModule=0x%xn",hModule);
        break;
    }
    return TRUE;
}

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
    mexPrintf("Inside MEX-functionn");
}

下面是它的工作原理:

>> mex -largeArrayDims testDLL.cpp

>> testDLL
DLL_PROCESS_ATTACH: hModule=0xa0980000
Inside MEX-function

>> testDLL
Inside MEX-function

>> clear testDLL
DLL_PROCESS_DETACH: hModule=0xa0980000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读