我用VS调用了DLL里面的函数 这函数的定义应该放在哪个头文件里面 是在XXXDLG。H里面还是XXX。H里面 是直接声明吗?

清容亲王   2010-5-11 09:41 楼主
我对应用程序不是很了解
我用VS调用了DLL里面的函数 这函数的定义应该放在哪个头文件里面 是在XXXDLG。H里面还是XXX。H里面 是直接声明吗?
谁帮我解释下

回复评论 (7)

你是怎么调用DLL里面函数的?动态还是静态?
点赞  2010-5-11 13:54
#include "XXXXX.h"
#pragma comment(lib,"XXXXX.lib")
如果这样调用放在要调用的DLL函数的文件头中就可以了。
点赞  2010-5-11 16:53
引用: 引用 2 楼 m593192219 的回复:

#include "XXXXX.h"
#pragma comment(lib,"XXXXX.lib")
如果这样调用放在要调用的DLL函数的文件头中就可以了。

你这个只是适用于lib。
dll不是这样调用的。
dll的函数你要用LoadLibrary Load进来,然后每个函数重定向到一个函数指针,调用函数指针来用;
或者直接#import 进来做也可以。
去查查MSDN先。
点赞  2010-5-11 17:09
假设你有一个dll,文件名yourdll.dll,里面有个函数JustTest(UINT, UINT)
调用的demo如下:

  1. HINSTANCE        hInstance;
  2. HANDLE                (FAR *lpFunction1)(UINT, UINT);

  3. if ((hInstance = LoadLibrary("yourdll.dll")) == NULL)
  4. {
  5.         MessageBox("Can not found yourdll.dll!", "Initialization error", MB_OK);
  6.         return FALSE;
  7. }

  8. lpFunction1= (HANDLE (FAR*)(UINT, UINT))GetProcAddress(hInstance, "JustTest");

  9. if (lpFunction1== NULL)
  10. {
  11.         MessageBox("Fail to load function JustTest!", "Initialization error", MB_OK);
  12.         return FALSE;
  13. }

如果Load成功,就可以直接调用(*lpFunction1)(UINT, UINT)了,这个就是你的JustTest。
你好好看下MSDN,很快就能学会的。
点赞  2010-5-11 17:20
LoadLibrary是动态链接,可以没有.h和.lib
#import是静态链接,必须有.h和.lib
#pragma comment(lib,"XXXXX.lib")只是链接静态库
点赞  2010-5-11 17:24
大家都说的很好
点赞  2010-5-11 22:19
学习了
点赞  2010-5-12 09:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复