今天教大家在VC中创建DLL文件,一起来学习一下。
: S3 B4 n e/ D6 w2 k; ?+ D" K2 Q 一.Win32动态链接库9 B( v/ C2 U, _4 i
1.制作的步骤:3 ~, @' x% a4 q& F
(1)新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型。( p( u5 Q3 J+ T) N1 S5 z/ O
(2)MyDll.h的内容如下:6 \0 A, T) B: w0 }/ x
extern \"C\" _declspec(dllexport) int sum(int a,int b);//本文所有的例子只有一个sum即加法函数。4 `2 k" c4 H( y8 G4 b
(3)MyDll.cpp的内容如下:9 z* A( p/ g y" h$ Q; }' k! o9 x
#include \"stdafx.h\"
' C9 G3 f" f, T! Q+ j5 R #include \"windows.h\"* z7 L# v1 x) c% F, M' q
#include \"MyDll.h\"/ b) ?! u! d5 D) C' A
BOOL APIENTRY DllMain(
# X0 r8 [5 u, M6 s HANDLE hModule,/ s4 U- K5 M" o- `
DWORD ul_reason_for_call,
8 A/ i; J( x) b; s LPVOID lpReserved
, f+ [; g, K/ u5 Q& p )& g2 a# D D# _, F, u) o) h
{$ q1 C! v, ~* k; y
return TRUE;0 Y9 j5 u' L8 ~1 `% r
}
# a. v: t) i" I8 B9 h% l( g0 { extern \"C\" _declspec(dllexport)int sum(int a, int b)2 r: }: S( U1 D& C! x! E" q
{
! p/ ?) W; S; U7 G( J return a+b;
. I3 S5 k9 e; T. ?5 D( d$ S! W }
5 O" _6 f! W# D (4)编译之后产生了MyDll.lib与MyDll.dll两个文件。& y0 O# ?7 z! d: C: @& e+ m! a
2.使用方法:2 }) z7 F# I+ A4 s
(1).隐式调用法: 将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:/ N0 x! Z, j& B, M
#include \"MyDll.h\"
) Q* A1 R( Q' R0 ` #pragma comment(lib,\"MyDll\");
# \6 G0 Y$ g$ T (2).显示调用法:将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中包含头文件,如:
6 h! [% G J7 A* p #include \"MyDll.h\"% o8 z( y! L' e' h9 F5 p
同时还需要在Project->Setting->Link->Object/library modules的框中增加MyDll.lib这个库。
) _( y. b3 W0 C) v0 l; X 二.MFC动态链接库
. L% | c; e: b0 {* u; e 1.制作的步骤:
3 T1 c( J/ ?- r4 u; Y. _8 h (1)新建MFC AppWizard(dll)工程,工程名为MFCDll,选择Regular DLL using shared MFC DLL类型。4 B! u7 M! Q$ U# ^* T4 X
(2)在生成的MFCDll.cpp文件后面增加下面几行:) B2 c: P3 M7 M5 _, D
int sum(int a, int b)
9 t# W5 k6 V) Y0 l {1 D+ z9 A! }, k
return a+b;
0 e+ ~( e) x6 I! p" p+ I }
: I/ g6 B& e1 l& n) }( s (3)在生成的MFCDll.def文件后面增加如下:
. D7 J) ~- l+ a' d+ m sum @1 ;表示第一个函数是sum
6 @, T! g w( p) D& b (4)编译后会产生两个文件MFCDll.lib,MFCDll.dll
1 w0 f+ Y Y6 i m 2.使用方法# O7 ]1 ^- [& J4 ?2 n, R$ p. Y
(1)隐式调用法: 将MFCDll.lib拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:4 U/ v/ L- s: w7 m" |
//注意这里没有在MFCDll.h中声明函数,所以不能直接包含MFCDll.h来声明函数。
4 d" a' Z5 R; {% [& ]5 L #pragma comment(lib,\"MFCDll\");6 l: U4 G0 i& [) p2 `* A) K' `) L
int sum(int a, int b);$ N2 M+ i& f1 L2 a
//当然如果你的DLL中有很多函数,那可以另外写个MFCDll.h,包含所有的函数声明,然后直接将头文件包含进去
0 c. m9 Z- }" }1 {2 ^1 O1 b6 N8 I8 | (2) 显示调用法:与Win32的调用方法一样,不需要#pragma comment(lib,\"MFCDll\");,但是需要在 Project->Setting->Link->Object/library modules的框中增加MFCDll.lib这个库 |