普通dll(不是com)中的输出函数(该函数中调用了win32 api)怎么声明? 我的总出错.如:
BOOL __declspec(dllexport)__stdcall  installhook()
{
hHook=SetWindowsHookEx(WH_GETMESSAGE,
(HOOKPROC)MessageHookProc,
hins, 0);
return TRUE;
}该函数调用了win32 api 中的SetWindowsHookEx(), 请问声明为__stdcall可以吗?我调用时这样:
typedef BOOL  (__stdcall  Tinstallhook)();
Tinstallhook * g_pFunc_installhook = NULL;g_hMessageHookDLL = LoadLibrary("MessageHook.DLL");
if (g_hMessageHookDLL != NULL)
{
g_pFunc_installhook = (Tinstallhook *)GetProcAddress(g_hMessageHookDLL,"installhook");
}结果loadLibrary()成功, 而GetProAddress()的返回值为空. why?
我必须用LoadLibrary的方式.

解决方案 »

  1.   

    http://tips.9hao.com/liulang/article/readnews.asp-id=4534.htm
      

  2.   

    你可以用dumpbin.exe(vc目录下有)察看动态库导出的函数签名,c++下面的函数签名不仅包括函数名,还有参数,g_pFunc_installhook = (Tinstallhook *)GetProcAddress(g_hMessageHookDLL,"installhook");中的"installhook"一般是不对的。
      

  3.   

    这里是DLL里的定义
    extern "C" __declspec(dllexport) BOOL StartHook(HWND hWnd)
    {
        ....
    }这里是你调用DLL时的声明
    typedef BOOL (STARTHOOK) (HWND);
    STARTHOOK *pStartHook = NULL;这样就完成了你的调用
    pStartHook(pEdit->GetSafeHwnd());试试兄弟,祝你好运~