写的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函数 让他弹出消息框 不知道哪里写错了调用就停止运行.
望大神指教

回答:

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

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

EXPORTS //导出

ahjie //函数名

回答:

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

回答:

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

以上是 写的win32程序调用外部dll就停止运行怎么回事. 的全部内容, 来源链接: utcz.com/p/190961.html

回到顶部