写的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