gpt4 book ai didi

C++ DLL 函数导出。 DLL 不会保持加载状态

转载 作者:行者123 更新时间:2023-11-28 01:05:58 24 4
gpt4 key购买 nike

您好,我遇到了以下问题,我无法弄清楚发生了什么。

动态链接库代码mylib.cpp(mylib.dll):

#include <Windows.h>
#include <tchar.h>

__declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserverd){

// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
MessageBox(NULL,
_T("DLL Loaded"),
_T("DLL Loaded"),
NULL);
break;

case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
MessageBox(NULL,
_T("DLL Unloaded"),
_T("DLL Unloaded"),
NULL);
break;
}
return TRUE;
}

程序代码my_prog.cpp:

#include <Windows.h>
#include <tchar.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

FARPROC pHookProc;
static HINSTANCE hInstDLL;

hInstDLL = LoadLibrary(_T("mylib.dll"));
pHookProc = GetProcAddress(hInstDLL, "HookProc");
if (!pHookProc) {
MessageBox(NULL,
_T("GetProcAddress failed"),
_T("GetProcAddress failed"),
NULL);
}
return 0;
}

这两个文件编译没有任何错误。每当我运行 my_prog.exe 时,它​​都会给出一条消息“DLL Loaded”,然后它会立即给出消息“DLL unloaded”,结果 GetProcAddress() 失败。请有人为我照亮它。为什么会瞬间卸载DLL?

提前谢谢大家。

编辑:

我按照 c-smile 的建议用 DLL_PROCESS_DETACH 替换了 DLL_THREAD_ATTACH。我检查并函数导出为:long __stdcall HookProc(int,unsigned int,long) (1)(0x00001000)。 GetProcAddress() 仍然失败。我得到“DLL Loaded”,GetProcAddress() 失败,“DLL Unloaded”

最佳答案

  1. DLL_THREAD_ATTACH 替换为 DLL_PROCESS_DETACH
  2. 确保您的函数完全按照“HookProc”导出。
  3. 如果不使用.def 文件来定义函数的导出名称。

关于C++ DLL 函数导出。 DLL 不会保持加载状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119862/

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