WEB开发网
开发学院软件开发VC VC++动态链接库(DLL)编程深入浅出(二) 阅读

VC++动态链接库(DLL)编程深入浅出(二)

 2007-03-15 21:47:52 来源:WEB开发网   
核心提示: (1)DLL导出函数,可供应用程序调用;(2) DLL内部函数,VC++动态链接库(DLL)编程深入浅出(二)(2),只能在DLL程序使用,应用程序无法调用它们,4.2 声明导出函数DLL中导出函数的声明有两种方式:一种为4.1节例子中给出的在函数声明中加上__declspec(dllex

(1)DLL导出函数,可供应用程序调用;

(2) DLL内部函数,只能在DLL程序使用,应用程序无法调用它们。

而应用程序对本DLL的调用和对第2节静态链接库的调用却有较大差异,下面我们来逐一分析。

首先,语句typedef int ( * lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun;

其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll;

再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用;

最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。

通过这个简单的例子,我们获知DLL定义和调用的一般概念:

(1)DLL中需以某种特定的方式声明导出函数(或变量、类);

(2)应用工程需以某种特定的方式调用DLL的导出函数(或变量、类)。

下面我们来对“特定的方式进行”阐述。

4.2 声明导出函数

DLL中导出函数的声明有两种方式:一种为4.1节例子中给出的在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。

下面的代码演示了怎样同.def文件将函数add声明为DLL导出函数(需在dllTest工程中添加lib.def文件):

; lib.def : 导出DLL函数
LIBRARY dllTest
EXPORTS
add @ 1

.def文件的规则为:

上一页  1 2 3 4 5 6 7  下一页

Tags:VC 动态 链接

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接