在 DLLMAIN() 中调用函数

Posted

技术标签:

【中文标题】在 DLLMAIN() 中调用函数【英文标题】:calling functions inside DLLMAIN() 【发布时间】:2019-01-04 14:18:27 【问题描述】:

我正在尝试创建 DLL 文件,但在 DLLMAIN() 中运行函数时遇到问题。

我想做这样的事情:

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
INT APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

switch (ul_reason_for_call) 

case DLL_PROCESS_ATTACH:
    foo1();
    break;

case DLL_PROCESS_DETACH:
    foo2()();
    break;


return true;



void foo1()
 //code
 

void foo2()
 // code

但它不起作用。 当我试图构建我得到的文件时

'foo1' identifier not found
'foo2' identifier not found

我在这里做错了什么?

谢谢!

【问题讨论】:

这是 C 101;它与 Windows 或 DllMain 无关。函数需要在调用之前声明。 【参考方案1】:

可能是因为您没有声明函数。放一个

void foo1();
void foo2();

在你使用 DllMain 之前,它会编译。

但请注意。 You should not do anything substantial in DllMain。尤其是涉及直接或间接加载库的任何事情都可能导致死锁。

【讨论】:

谢谢。但现在我得到了这些错误: DllMain@12 已经在 Dll1.obj 中定义,找到一个或多个多重定义的符号。知道有什么问题吗? 见***.com/questions/4539238/dllmain12-already-defined

以上是关于在 DLLMAIN() 中调用函数的主要内容,如果未能解决你的问题,请参考以下文章

首先调用的是 DllMain() 还是全局静态对象构造函数?

从DllMain调用LoadLibrary

Dllmain的作用

如何在dll注入中调用特定函数?

在不执行 dllmain 函数的情况下加载 Dll

使用 LoadLibrary 后未调用 DllMain