写的win32程序调用外部dll就停止运行怎么回事.

程序主要代码部分:图片描述
typedef void(*SetHook)(void);

void process()
{

HINSTANCE hdll;
hdll = LoadLibrary(L"C:\\Users\\Cool Jie\\Documents\\Visual Studio 2013\\Projects\\SetwindowHook DLL\\Release\\SetwindowHook DLL.dll");

SetHook sethook;


if (hdll == NULL)
{
    FreeLibrary(hdll);//shi fang dll
    MessageBox(h1, L"加载dll失败!", L"erro", NULL);
}
else
{
    sethook = (SetHook)GetProcAddress(hdll, "ll");
    sethook();

    
}


}

dll代码部分:
图片描述
// dllmain.cpp : 定义 DLL 应用程序的入口点。

include "stdafx.h"

include<windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,

                   DWORD  ul_reason_for_call,
                   LPVOID lpReserved
                 )

{

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
    break;
}
return TRUE;

}

LRESULT CALLBACK KeyboardProce(

int code,
WPARAM wParam,
LPARAM lParam
)

{

if ((wParam == VK_F8) && ((lParam << 31) == 0))
{
    MessageBox(NULL, L"你按下了", L"", NULL);
}

return CallNextHookEx(NULL, code, wParam, lParam);

}

void Sethook()
{

HWND hwnd = FindWindow(L"WTWindow", L"测试");

if (!hwnd)
{
    MessageBox(NULL, L"请先运行软件.", L"erro", MB_OK);
    return;
}

DWORD Pid, Tid;
Tid = GetWindowThreadProcessId(hwnd, &Pid);

SetWindowsHookEx(WH_KEYBOARD, KeyboardProce, GetModuleHandle(L"SetwindowHook DLL.dll"), Tid);

}

void ll()
{

MessageBox(NULL, L"hello.", L"erro", MB_OK);
return;

}

我只是想调用dll里面的ll函数 让他弹出消息框 不知道哪里写错了调用就停止运行.
望大神指教

阅读 3.5k
3 个回答

在工程中新建个def文件写入:

LIBRARY "SetwindowHook DLL" //你的工程名

EXPORTS //导出

ahjie //函数名

你传给GetProcAddress的DLL函数名称应该是
Sethook,而不是ll。
另外Sethook没有导出,在声明的void后面,Sethook前面,加上 __declspec(dllexport)
或者写一个def文件导出函数,这个方法另外一个回答写了。

确定DLL版本兼容吗?会不会是64位的库

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题