关于vc++建立dll并调用的问题,请帮帮忙

小崔爱读书 2004-07-14 04:32:13
关于vc++建立dll并调用的问题,请帮帮忙

我建了一个dll,源程序是这样的。



#include "stdafx.h"
#define EXPORT extern "C" __declspec (dllexport)




BOOL WINAPI DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}



EXPORT int WINAPI test()
{



MessageBox(NULL,"Test","test",0);
return 1;
}



然后编译调用。在窗口的WM_LBUTTONDOWN消息触发。



前面声明了:



typedef int (WINAPI * HProc)();
HProc hp;
HINSTANCE hLib;



然后是



case WM_LBUTTONDOWN:



hLib=LoadLibrary(TEXT("Hook.dll"));
if(hLib!=NULL) //跟踪到这里显示hLib不为空,也就是打开dll成功。
hp=(HProc)GetProcAddress(hLib,"test");//这里显示hp为空,也就是调用函数test出错。
if(hp!=NULL)
(*hp)();
return 1;



为什么有这样的问题。

...全文
161 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwertasdfg123 2004-07-15
  • 打赏
  • 举报
回复
楼主使用了EXPORT了,就不需要def文件。


同意楼上的。但WINAPI是__stdcall 不等于 EXPORT.
Dong 2004-07-15
  • 打赏
  • 举报
回复
谢谢 qwertasdfg123(一休)
antijpn 2004-07-15
  • 打赏
  • 举报
回复
使用__stdcall也能这样调用吗?反正我从来没用这种现式加载的方法成功调用使用了__stdcall协议的函数,每次都是产生错误(好像是什么pop ebx什么的,记不得了)

我一般用的都是__cdecl协议,而且都是加入了extern "C"声明函数,确保函数名在编译的时候不产生变化。楼主可以试试看。要不然就隐式加载,链接的时候把lib文件文件连上就可以了。

使用了EXPORT宏,仍然可能需要DEF文件,这样可以给函数指定一个导出时候的名称,而且还能加入其他的一些信息。
Dong 2004-07-14
  • 打赏
  • 举报
回复
EXPORT 应该就是 WINAPI,他们相同定义的。运用其中一个就行了。
你有没有在def文件里列出要导出的函数的??

typedef int (WINAPI * HProc)();
该为
typedef int (* HProc)();
看看
sclzmbie 2004-07-14
  • 打赏
  • 举报
回复
using depends.exe lookup your export function name.
flyelf 2004-07-14
  • 打赏
  • 举报
回复
用def文件导出函数

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧