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的错误,不知是不是我没有设置好?
//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);
函数接口:
首先把生成的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);
相关文章推荐
- VC6.0下调用Dll文件提供的函数接口和全局变量(转)
- VC中创建DLL,导出全局变量,函数和类(隐式调用)
- C# 调用 C++ dll 动态链接库中多个函数时全局变量的问题
- 生成/创建 DLL 及调用/引用DLL里的函数、全局变量、静态C++类成员函数等
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
- 利用VS2010生成DLL文件及DLL中函数和全局变量的使用
- C#调用VC DLL接口函数参数类型转换方法介绍
- 如何调用dll文件中的函数
- 在vs中用C++编程的方式生成.dll文件和以动态、静态调用dll中函数
- 多个".h"文件中声明及定义 全局变量和函数
- C#调用VC DLL接口函数参数类型转换的方法
- C#调用VC的DLL的接口函数参数类型转换一览表
- jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
- 静or动态库中的全局变量被不同的dll调用修改,其值是否独立
- jquery ajax done 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
- C# 如何调用 C++ DLL中的函数接口和回调函数
- DLL导出全局变量在多个DLL中调用
- matlab全局变量(global):够被其他函数调用.在这两个函数中都要用global修饰这个变量.
- matlabR2008a函数编译成dll供vc6.0调用的方法
- 当调用的DLL中有全局变量时调用它的多个实例是否共享同一个全局变量?????