在WIN32编程中 DLL文件的编写过程是怎样的?

在WIN32编程中 DLL文件的编写过程是怎样的?,第1张

Dll的作用就不用多说了吧?动态链接库,可以封装函数、变量、类库等数据,为外部实现透明调用。

1. 将函数封装进dll文件中:

使用Codeblocks新建一个名为testDll的Dynamic Link Library项目,默认会生成一个.cpp和一个.h文件,里面有基本的代码,修改如下:

main.h

#ifndef __MAIN_H__

#define __MAIN_H__

#i nclude <windows.h>

#i nclude <stdio.h>

#i nclude <stdlib.h>

/**//* To use this exported function of dll, include this header

* in your project.

*/

#ifdef BUILD_DLL

#define DLL_EXPORT extern "C" __declspec(dllexport)

#else

#define DLL_EXPORT extern "C" __declspec(dllimport)

#endif

DLL_EXPORT int addxy( int a, int b )

#endif // __MAIN_H__注意定义DLL_EXPORT的时候要加上extern "C",不然是找不到函数的。

main.cpp:

#i nclude "main.h"

//test here

DLL_EXPORT int addxy( int a, int b )

...{

return (a+b)

}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

...{

switch (fdwReason)

...{

case DLL_PROCESS_ATTACH:

// attach to process

// return FALSE to fail DLL load

break

case DLL_PROCESS_DETACH:

// detach from process

break

case DLL_THREAD_ATTACH:

// attach to thread

break

case DLL_THREAD_DETACH:

// detach from thread

break

}

return TRUE// succesful

}

其中函数addxy是我定义亩派禅的测试函数,前面加的DLL_EXPORT声明是main.h中定义的函迅尘数说明。

然后编译类型选Release,编译通过后,在bin/Release目录下羡仿生成了一个testDll.dll的动态链接库文件。如果编译类型选Debug的话,编译出来的函数比较奇怪,这个可以分别从Release和Debug文件夹中的libtestDll.def文件看出来。使用VS2005所带的dumpbin命令可以看出libtestDll.dll的内容:

输入dumpbin /exports testDll.dll可以看到如下输出:

D:My DocumentswxWidgets estcallDll>dumpbin /exports testDll_r1.dll

Microsoft (R) COFF/PE Dumper Version 8.00.50727.42

Copyright (C) Microsoft Corporation. All rights reserved.

Dump of file testDll_r1.dll

File Type: DLL

Section contains the following exports for testDll.dll

00000000 characteristics

477CD664 time date stamp Thu Jan 03 20:34:44 2008

0.00 version

1 ordinal base

1 number of functions

1 number of names

ordinal hint RVA name

10 00001180 addxy

Summary

1000 .bss

1000 .data

1000 .edata

1000 .idata

1000 .rdata

1000 .reloc

1000 .text从中可以看出我们定义的addxy函数。

到此为止,动态库已经完成。

方法1:重新启动电脑

有时可能导致找不到或丢失DLL文件错误的问题是暂时的。重启可能是一种选择,只要这样悄芹能解决问题。

方式2:重新安装程序

如果在使用或打开特定应用程序时发生DLL错误,则可能重新安装此程序能够哗运信正确安装并再次注册丢失的DLL文件。但是,在大多数情况下,这种方式效果不佳。

方式3:从回收站恢复已删除的DLL文件

您可能意外删除了DLL文件但尚未实现。结果,发现DLL未找到或丢失DLL等错误。您可以转到电脑中的回收站,并检查这些文件是否保存在此处。如果是这样,请尝试使用“还原”按钮还原它们。但是,如果在回收站中无法查看丢失的DLL文件,您可以做的是向文件恢复软件寻求帮助。

方式4:使用文件恢复软件恢复丢失的DLL文件

如果丢失的文件在删除之前可以正常工作,使用一个免费的数据恢复软件软乱轮件来恢复已删除的DLL文件是一个明智的想法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12296216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存