码迷,mamicode.com
首页 > 编程语言 > 详细

MFC点点滴滴——调用dll及会出现的问题

时间:2015-03-14 18:38:13      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

在编程中常常会用到别人封装好的dll文件,通常有两张调用的方法

一.隐式的加载时链接

需要xxx.dll文件、xxx.lib文件和xxx.h文件,其中将xxx.dll文件放在exe文件输出的文件夹下(debug文件夹),xxx.lib和xxx.h文件放在工程文件夹下。

(1)先将xxx.h文件添加至工程中(这个文件中有dll文件中函数声明,格式如

extern "C"__declspec(dllimport)函数返回类型 函数名(参数列表

),然后头文件中加入#include "xxx.h"

(2)将lib添加到工程中,有如下几种方法:

LIB文件直接加入到工程文件列表中

  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入xxx.lib文件即可。

  ②设置工程的 Project Settings来加载DLL的LIB文件

  打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中填写xxx.lib文件。

  ③通过程序代码的方式

   可以在xxx.h 文件中加入预编译指令#pragma comment (lib,"xxx.lib")

二.显式的运行时链接

只需要xxx.dll文件,将xxx.dll文件放在exe文件输出的文件夹下(debug文件夹)。

需要添加如下代码


1. typedef  函数返回值类型 函数别名 ) (参数列表);//和dll文件中定义的函数一致

2. HINSTANCE hDLL;
3. 函数别名 函数名;//定义一个函数别名类型的函数名
4. hDLL=LoadLibrary("xxx.dll");//加载动态链接库xxx.dll文件
5. 函数名=(函数别名)GetProcAddress(hDLL,"dll文件中的对应的函数名");

6. 函数名(参数);//调用函数即可


三.常见的报错信息

Debug Error:
Program: ...
Module:
File: i386\chkesp.c
Line: 42

解决方法:

定义函数指针(二.显式的运行时链接 中代码第一行),声明 typedef 函数返回值类型 (CALLBACK * 函数别名)(参数列表)

其中(CALLBACK *也可以是_stdcall,WINAPI)。去掉CALLBACK。(这个问题困扰了我两天,但是还是不清楚原因,去掉winapi后,程序正常,希望有大神可以指点)



MFC点点滴滴——调用dll及会出现的问题

标签:

原文地址:http://blog.csdn.net/hellozhd/article/details/44261139

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!