dllmain Bertha 。 2022-11-11 10:51 128阅读 0赞 `win32`提供了一个特殊函数名叫`DllMain`,这个函数写在dll中会根据四种情况进行回调。 1. 某个线程加载了dll 2. 某个线程卸载了dll 3. 主进程加载了dll 4. 主进程卸载了dll [微软dllmain官方文档][dllmain] 我们在`dll`工程随意新建一个类 //My.cpp #include<iostream> #include<process.h> #include <windows.h> using namespace std; BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason,//调用的原因, _In_ LPVOID lpvReserved //保留使用 ) { switch (fdwReason) { //主进程加载了dll case DLL_PROCESS_ATTACH: cout <<"DLL_PROCESS_ATTACH" <<endl; break; //主进程卸载了dll case DLL_PROCESS_DETACH: cout << "DLL_PROCESS_DETACH" << endl; break; } //如果动态加载的dll的话,返回false 那么LoadLibrary返回null //如果静态加载的dll的话 返回false 进程直接奔溃 return TRUE; } 我们看下使用库的地方 // UseLib.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <windows.h> using namespace std; typedef int(*myAdd)(int a, int b); int main() { //加载我们的动态库 请放入exe运行路径或者放入系统`C:\Windows\SysWOW64\` HMODULE loadLibrary = LoadLibrary("MyDll.dll"); //通过name myAdd procAddress = (myAdd)GetProcAddress(loadLibrary, (LPCSTR)1); //通过ordinal //myAdd procAddress2 = (myAdd)GetProcAddress(loadLibrary, (LPCSTR)12); int result = procAddress(1, 2); //int result2 = procAddress2(1, 2); cout << result << endl; //从程序中卸载dll FreeLibrary(loadLibrary); } 输出: DLL_PROCESS_ATTACH 3 DLL_PROCESS_DETACH [dllmain]: https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain
相关 【错误异常大全】:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。 文章目录 错误异常: 解决方案一: 解决方案二: -------------------- 错误异常: > 正尝试在 OS 加载程序锁内执行托 比眉伴天荒/ 2023年01月19日 07:18/ 0 赞/ 5 阅读
相关 dllmain `win32`提供了一个特殊函数名叫`DllMain`,这个函数写在dll中会根据四种情况进行回调。 1. 某个线程加载了dll 2. 某个线程卸载了dll 3. 主进 Bertha 。/ 2022年11月11日 10:51/ 0 赞/ 129 阅读
相关 dllmain、rundll32、regsvr32 文章目录 dllmain rundll32 regsvr32 dllmain 这个函数里面有四个判断点,分别是: 1. 当进程调用dll时 ゞ 浴缸里的玫瑰/ 2022年10月13日 12:52/ 0 赞/ 205 阅读
相关 error LNK2005: _DllMain@12 already defined in MSVCRTD.lib 本文主要分析和解决编译链接时产生的 LNK2005 错误。 【错误信息】: mfcs90ud.lib(dllmodul.obj) : error LNK20 朱雀/ 2022年08月21日 09:59/ 0 赞/ 259 阅读
相关 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码 http://blog.csdn.net/skd12/article/details/46786117 当我在窗体初始化的时候,调用了一个外部的dill时,它 淡淡的烟草味﹌/ 2022年07月12日 08:28/ 0 赞/ 101 阅读
相关 mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj) To solve it, do the following steps: 1. Open project property pages by Alt+F7 2. Dear 丶/ 2022年06月10日 07:52/ 0 赞/ 130 阅读
相关 dllMain函数的作用 1 DLLMain()函数的功能 Windows在加载DLL的时候,需要一个入口函数,就如同控制台或DOS程序需要main函数、Win32程序需要WinMain函数一样 男娘i/ 2022年05月12日 14:06/ 0 赞/ 266 阅读
相关 dll动态链接库(2)---入口函数DllMain 1、动态库导出函数的查看: 使用Vc++自带的Depends工具进行查看,但是只能看到函数的名字,具体的函数参数及返回值看不到,所以要把动态库导出函数声明的头文件(.h文件 女爷i/ 2022年05月05日 08:58/ 0 赞/ 320 阅读
相关 关于mfc动态库需要手动设置dllmain内容的问题 一般我们的dll都有隐式的dllmain,普通的dll可以直接手写dllmain,但是mfc的dll因为会调用mfc库,dllmain已经存在,如果直接编译会出现 ![201 淩亂°似流年/ 2022年02月21日 04:07/ 0 赞/ 230 阅读
还没有评论,来说两句吧...