zoukankan      html  css  js  c++  java
  • DLL导出函数小问题

    好久没写过DLL了,手生得很。今天写了一个DLL来测试一个Hook例子,结果导出函数以后死活是无法加载。
    因为用的是.NET 2005,所以默认使用的Unicode,改成Multi-Byte Character Set 也不行,

     1 m_hLibrary = LoadLibrary(TEXT("MessageHook.dll"));
     2     if ( m_hLibrary )
     3     {
     4         StartHookFunc start = (StartHookFunc)GetProcAddress(m_hLibrary, "StartHook");
     5         if ( start )
     6         {
     7             start(this->GetSafeHwnd());
     8         }
     9         else
    10         {
    11             MessageBox(TEXT("Error to find StartHook function!"));
    12             PostQuitMessage(-1);
    13         }
    14     }
    15 

    GetProcAddress总是返回空。
    DLL代码部分:
    1 BOOL _declspec(dllexport) StartHook(HWND _hMonitor)
    2 {
    3     s_hTargetWnd    = _hMonitor;
    4     g_hHook         = ::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MyMouseProc, g_hModule, 0);
    5     if (g_hHook == NULL)
    6         return FALSE;
    7 
    8     return TRUE;
    9 }
    用TotalCommander自带的查看器查看了一下DLL,发现StartHook函数已经导出,就是不能得到地址,百思不得其解。函数名也是StartHook。
    只好改成静态连接先运行了。后来想起来用depend查看了一下,大跌眼镜,导出的函数名不是StartHook而是XYZStartHook@这样的名字(名字没记下来)。于是用extern "C" 修饰了一下,搞定。又用了一下Def文件,结果没有导出函数(去掉了_declspec(dllexport)),也就是说def文件没起作用。在工程属性里面找了一下,发现要在"Configuration Properties"->"Linker"->"Input"->"Module Definition File"一栏里面把DEF文件名填上才行。
    汗一个!~
    感慨:TotalCommander不是万能滴啊!
  • 相关阅读:
    【Mocha.js 101】Mocha 入门指南
    CSS 中 Font-Family 中英文对照表
    Android Studio中找出不再使用的资源
    Java反射机制实战——字段篇
    python进阶——day02、03面向对象进阶
    python进阶_day01面对对象编程基础
    day05(文件配置命令和远程登录)
    day04(磁盘管理与目录介绍)
    day03(系统启动及常用的Linux命令的基本使用)
    day02(操作系统简介和Linux的安装与常用命令简介)
  • 原文地址:https://www.cnblogs.com/hyamw/p/750326.html
Copyright © 2011-2022 走看看