生成DLL的几种方法和使用方法
2009-05-10 00:56
387 查看
1.用__declspec (dllexport) 约定来导出DLL函数
建立一个EDRLIB动态连接库项目:
/*EDRLIB.h文件*/
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport) //如是 C++编译则用extern"C"限制其为C模式编译
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT BOOL CALLBACK EdrCenterText (HDC, PRECT, PCSTR) ;
EXPORT BOOL CALLBACK MsgBox (PCSTR);
/*EDRLIB.C文件*/
#include <windows.h>
#include "edrlib.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH://DLL被加载
MessageBox(0,"DLL正被加载 !","DllMessage",0);
break;
case DLL_PROCESS_DETACH:
MessageBox(0,"进程将要退出!","DllMessage",0);
break;
default:
break;
}
return TRUE ;
}
EXPORT BOOL CALLBACK EdrCenterText(HDC hdc, PRECT prc, PCSTR pString)
{
int iLength ;
SIZE size ;
char cstr[20];
iLength = lstrlenA (pString) ;
GetTextExtentPoint32A (hdc, pString, iLength, &size) ;
return TextOutA (hdc,(prc->right - prc->left - size.cx) / 2,
( prc->bottom - prc->top - size.cy) / 2,
pString, iLength) ;
}
EXPORT BOOL CALLBACK MsgBox (PCSTR pString)
{
MessageBox(0,pString,"DllMessage",0);
return TRUE;
}
这样就生成了一个EDRLIB.lib,EDRLIB.dll
在项目中使用:
1.1通过EDRLIB.lib引用连接库来使用
EDRLIB.lib放置到settings->Link->Input->Object/libary modules中,并设置Additional library Path路径正确.
代码如下 :
/*test.c文件*/
#include "stdafx.h"
#include "../edrlib/EDRLIB.h" //引用头文件
/*省略一些代码*/
EdrCenterTextA (hdc, &rect,TEXT ("调用DLL接口输出信息")) ;//可以直接使用该函数
/*省略一些代码*/
1.2通过LoadLibrary来动态加载,但这里请用DLL函数查看器,看清楚DLl对外提供的函数接口名.
/*test.c文件*/
#include "stdafx.h"
#include "resource.h"
typedef BOOL (__stdcall* EdrCenterTextA)(HDC,PRECT,PCSTR); //定义数据类型
typedef BOOL (__stdcall* MsgBox)(PCSTR);
/*省略一些代码*/
HMODULE hDllLib = LoadLibrary("EDRLIB.dll");//加载成功
EdrCenterTextA EdrCenterText2 = (EdrCenterTextA)GetProcAddress(hDllLib,"_EdrCenterText@12");
EdrCenterText2(hdc, &rect,"hello") ;
FreeLibrary(hDllLib);
/*省略一些代码*/
2.用*.def文件导出Dll函数
*.def文件说明:http://msdn.microsoft.com/zh-cn/library/28d6s79h(VS.80).aspx
/*EDRLIB.h文件*/
#ifdef __cplusplus
#define EXPORT extern "C" //如是 C++编译则用extern"C"限制其为C模式编译
#else
#define EXPORT
#endif
EXPORT BOOL EdrCenterText (HDC, PRECT, PCSTR) ;
EXPORT BOOL MsgBox (LPCTSTR);
/*EDRLIB.def文件*/
LIBRARY EDRLIB.dll
DESCRIPTION '(c)2008-2009 yan'
version '1.0.0.1'
EXPORTS
MsgBox @1 PRIVATE
EdrCenterText @2 PRIVATE
我们可以通过1.1的方法来使用,但是要把EDRLIB.def文件引用到Test使用项目中去,Project->SETTINGS->lINK ->Projcet Options 加入/DEF:EDRLIB.def
]深入浅出Visual C++动态链接库(Dll)编程:http://langzi0115.bokee.com/6508109.html
建立一个EDRLIB动态连接库项目:
/*EDRLIB.h文件*/
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport) //如是 C++编译则用extern"C"限制其为C模式编译
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT BOOL CALLBACK EdrCenterText (HDC, PRECT, PCSTR) ;
EXPORT BOOL CALLBACK MsgBox (PCSTR);
/*EDRLIB.C文件*/
#include <windows.h>
#include "edrlib.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH://DLL被加载
MessageBox(0,"DLL正被加载 !","DllMessage",0);
break;
case DLL_PROCESS_DETACH:
MessageBox(0,"进程将要退出!","DllMessage",0);
break;
default:
break;
}
return TRUE ;
}
EXPORT BOOL CALLBACK EdrCenterText(HDC hdc, PRECT prc, PCSTR pString)
{
int iLength ;
SIZE size ;
char cstr[20];
iLength = lstrlenA (pString) ;
GetTextExtentPoint32A (hdc, pString, iLength, &size) ;
return TextOutA (hdc,(prc->right - prc->left - size.cx) / 2,
( prc->bottom - prc->top - size.cy) / 2,
pString, iLength) ;
}
EXPORT BOOL CALLBACK MsgBox (PCSTR pString)
{
MessageBox(0,pString,"DllMessage",0);
return TRUE;
}
这样就生成了一个EDRLIB.lib,EDRLIB.dll
在项目中使用:
1.1通过EDRLIB.lib引用连接库来使用
EDRLIB.lib放置到settings->Link->Input->Object/libary modules中,并设置Additional library Path路径正确.
代码如下 :
/*test.c文件*/
#include "stdafx.h"
#include "../edrlib/EDRLIB.h" //引用头文件
/*省略一些代码*/
EdrCenterTextA (hdc, &rect,TEXT ("调用DLL接口输出信息")) ;//可以直接使用该函数
/*省略一些代码*/
1.2通过LoadLibrary来动态加载,但这里请用DLL函数查看器,看清楚DLl对外提供的函数接口名.
/*test.c文件*/
#include "stdafx.h"
#include "resource.h"
typedef BOOL (__stdcall* EdrCenterTextA)(HDC,PRECT,PCSTR); //定义数据类型
typedef BOOL (__stdcall* MsgBox)(PCSTR);
/*省略一些代码*/
HMODULE hDllLib = LoadLibrary("EDRLIB.dll");//加载成功
EdrCenterTextA EdrCenterText2 = (EdrCenterTextA)GetProcAddress(hDllLib,"_EdrCenterText@12");
EdrCenterText2(hdc, &rect,"hello") ;
FreeLibrary(hDllLib);
/*省略一些代码*/
2.用*.def文件导出Dll函数
*.def文件说明:http://msdn.microsoft.com/zh-cn/library/28d6s79h(VS.80).aspx
/*EDRLIB.h文件*/
#ifdef __cplusplus
#define EXPORT extern "C" //如是 C++编译则用extern"C"限制其为C模式编译
#else
#define EXPORT
#endif
EXPORT BOOL EdrCenterText (HDC, PRECT, PCSTR) ;
EXPORT BOOL MsgBox (LPCTSTR);
/*EDRLIB.def文件*/
LIBRARY EDRLIB.dll
DESCRIPTION '(c)2008-2009 yan'
version '1.0.0.1'
EXPORTS
MsgBox @1 PRIVATE
EdrCenterText @2 PRIVATE
我们可以通过1.1的方法来使用,但是要把EDRLIB.def文件引用到Test使用项目中去,Project->SETTINGS->lINK ->Projcet Options 加入/DEF:EDRLIB.def
]深入浅出Visual C++动态链接库(Dll)编程:http://langzi0115.bokee.com/6508109.html
相关文章推荐
- 生成DLL的几种方法和使用方法
- 生成DLL的几种方法和使用方法
- [转] lib和dll 区别,生成及使用方法
- 查看VC++生成的dll的方法或函数名[dumpbin使用方法]
- VS2010中使用CL快速 生成DLL的方法
- 【原创】PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- DEV-CPP中生成和使用DLL的方法
- 使用gcc生成动态链接库dll的方法
- c++生成dll使用python调用dll的方法
- MFC中的dll生成与使用方法
- c++生成dll使用python调用dll的方法
- PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- VS2010中使用CL快速 生成DLL的方法
- 使用PHP生成二维码的两种方法(带logo图像)
- SNMP阶段总结,基于SNMP++提取进程内存使用,CPU占用率,进程名称,PID,路径等信息的功能函数,生成了DLL,源码送上
- 动态链接库 仅有.dll文件时候的使用方法
- 使用 Java 测试网络连通性的几种方法
- 深入学习.net验证码生成及使用方法
- 用Qt生成dll类库及调用方法
- 【php】网站生成静态页的几种方法?