创建动态链接库

要创建DLL,就必须首先创建一个或多个源代码文件,还有一个连接文件用来导出函数。如果打算可以以载入时动态链接使用DLL的话,还必须创建一个导入库。
创建源文件

  DLL的源代码中包含了需导出的函数及数据,还有内部函数及数据,另外可以有一个可选的入口函数。你可以使用任意支持创建基于Windows的DLL工具来创建DLL。

  如果你的DLL需要支持多线程,应该让你的DLL做到“线程安全”。你必须同步DLL所有的全局数据以避免冲突发生,也必须确认你使用的库也是线程安全的。例如,Microsoft® Visual C++®包含了多个C运行时库,其中之一不是线程安全的,而另外两个是线程安全的。

出口函数

 

  如何指定出口函数与开发工具有关,有些编译器允许在声明出口函数时使用一个修饰符即可,而对于另外一些而言,就必须在连接时指定一个出口声明文件。

  例如,Visual C++中,就有两种导出DLL函数的方式:_declspec修饰符或者一个.def文件。如果指定了_declspec修饰符,就不必声明.def文件。

  关于出口函数的更多信息,请参照开发工具的相关文档。

创建一个导入库

  导入库(.lib)中包含了连接程序所需的出口函数的引用信息,通过这些信息,系统就可以在运行时定位所需的DLL及DLL出口函数。

  例如, tabindex="0" keywords="_win32_createwindow" errorurl="../common/badjump.htm">要调用CreateWindow 函数,就必须连接时导入User32.lib库,之所以这样是因为CreateWindow函数处于User32.dll这个系统DLL文件中,User32.lib用来解析代码中到User32.lib出口函数调用。DLL载入后,调用DLL中的函数需要进行修正,一旦系统初始化程序,由于需要DLL中的出口函数,就会载入User32.dll,接着就会更新函数地址表入口,所有CreateWindow的调用都会转而请求User32.dll中的出口函数。

  关于创建导入库的更多信息,请参照开发工具的相关文档。

警告  DLL中调用ExitProcess函数将会当值不可预料的程序或系统错误。从DLL中调用ExitProcess时需确认您确实知晓到底是哪个程序或系统组件会载入这个DLL,并且在上下文中调用是安全的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值