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

在编程中常常会用到别人封装好的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后,程序正常,希望有大神可以指点)



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。