您的位置:首页 > 其它

VC6.0下调用Dll文件提供的函数接口和全局变量

2013-03-01 11:56 483 查看
复习一下VC: 本文摘自: http://gauzeehom.iteye.com/blog/1031130


函数接口:

首先把生成的Dll文件(如RegularDll.dll和RegularDll.lib)拷贝到当前工程所在文件夹,调用有两种方法:

1)动态方法:

使用LoadLibrary和GetProcAddress等函数,例

typedef void (*lpFun)(void);

HINSTANCE hDll;

hDll = LoadLibrary("RegularDll.dll");

if (NULL==hDll) {

MessageBox("Dll load failed!");

}

lpFun pShowDlg = (lpFun)GetProcAddress(hDll,"ShowDlg");

if (NULL == pShowDlg) {

MessageBox("Load function \"ShowDlg\" failed!");

}

pShowDlg();*/

2)静态声明方法:

创建Dll的工程中,函数声明和定义时用 _stdcall 修饰,例 

void _stdcall ShowDlg(void){...} 

在调用dll的工程的文件中,在文件头部声明库和函数,如下例

#pragma comment(lib,"RegularDll.lib")

void _stdcall ShowDlg(void);

调用时直接ShowDlg()就可以了。

以上两种方法在VC6.0中调试成功,保证可用!

有的文章中说这样声明即可:

#pragma comment(lib,"RegularDll.lib")

void ShowDlg(void); 

但在VC6.0下会报找不到函数ShowDlg的错误,不知是不是我没有设置好?

全局变量(访问Dll文件中的全局变量)

在创建Dll的工程中,在头文件中这样声明:

//lib.h

#ifndef _LIB_H

#define _LIB_H

#ifdef DLL_FILE

extern int dllGlobalVar;

#else

extern int _declspec(dllimport) dllGlobalVar; 

#endif

在创建Dll的工程的cpp文件中先定义DLL_FILE,再定义该变量,如下例:

//lib.cpp

#define DLL_FILE

#include "lib.h"

int dllGlobalVar; //define

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

{

switch(ul_reason_for_call) {

case DLL_PROCESS_ATTACH:

dllGlobalVar = 100; // initialization when dll attached

break;

……

}

int _stdcall GetGlobalVar()

{

return dllGlobalVar; // use the global variable

}

在调用Dll文件的工程中,需要访问该全局变量时,声明如下:

#include "..\\lib.h"

#pragma comment(lib,"dllTest.lib")

然后可以当作普通的全局值变量使用和修改了!

printf("%d \n", dllGlobalVar);

dllGlobalVar = 234;

printf("%d \n", dllGlobalVar);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐