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

лл!

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

1 0 00001180 addxy

Summary

1000 .bss
1000 .data
1000 .edata
1000 .idata
1000 .rdata
1000 .reloc
1000 .text从中可以看出我们定义的addxy函数。
到此为止,动态库已经完成。
温馨提示:内容为网友见解,仅供参考
无其他回答

在WIN32编程中 DLL文件的编写过程是怎样的?
其中函数addxy是我定义的测试函数,前面加的DLL_EXPORT声明是main.h中定义的函数说明。然后编译类型选Release,编译通过后,在bin\/Release目录下生成了一个testDll.dll的动态链接库文件。如果编译类型选Debug的话,编译出来的函数比较奇怪,这个可以分别从Release和Debug文件夹中的libtestDll.def文件看出来。...

C++ win32生成DLL文件供其他程序调用该怎么生成求步骤
1、从“文件”菜单中,选择“新建”,然后选择“项目…”。2、从“项目类型”窗格中选择“Visual C++”下的“Win32”。3、从“模板”窗格中,选择“Win32 控制台应用程序”。4、为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段。为解决方案选择一个名称,如“DynamicLibrary”,并...

如何正确创建DLL和使用DLL
对于DLL中对象的动态调用过程基本上是一样的,先将DLL加载到内存,然后通过GetProcAddress获得对象所在的地址。从上面可以看出,DLL的动态调用过程就是将DLL加载到内存,然后通过GetProcAddress获得DLL中指定对象或函数在该内存中的地址,通过该地址就可以对函数或对象进行调用。由于在C++中没有类的对象,也没有...

一个带命令行参数的win32 console Application怎么才能正确导出一个Dl...
1、首先建立一个动态链接库(DLL)工程。建立方法:新建 Win32 工程时选择 DLL 属性,或者建立一个空工程,在工程属性里将 Configuration Type 设置为“dll”。2、添加源文件“name.c”这里也可以起名为“name.cpp”,不过这样就需要在文件里使用“extern "C"”来设置编译方式。3、在“name.c”里直...

用VS 如何由源代码生成DLL文件
1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。MyDLL.cpp内容如下:1 #include 2 using namespace ...

dll文件用什么语言写或者怎么制作?
可以写dll的语言很多。。。比如c# delphi.都可以~其实dll就是一个库。

DDL的工作原理
DLL 可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL 在内存中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的编程语言及编译器无关。 在Win32 环境中,每个进程都复制了自己的读\/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段...

win32编程如何调用另一个程序或者dll…不要刚说一个函数,具体呢_百度...
静态调用就是在代码里 include 头文件,包含函数定义,并且链接 dll 的 lib 文件,然后直接使用即可,编译器会自动链接这个 dll,但是如果 dll 找不到,那么程序会无法启动 所以对于不确定 dll 是否可以正常使用时,需要使用动态调用 首先需要使用 LoadLibrary 函数 HMODULE WINAPI LoadLibrary( _In_ ...

如何用VC编写dll文件
VC编写dll文件 1、VC++->New->Project->Win32 Dynamic_Link Library;2、选择创建一个空工程;首先DLL需要一个头文件,所以新建一个C\\C++ Header File 这个头文件中必须包含想要输出的变量和函数,头文件必须定义用于输出的任何符号和数据结构。例如 :这里边又一个预定义 ifdef MYLIBAPI else define ...

DLL文件在Windows系统中的作用和调用方式是什么?
DLL由全局数据、服务函数和共享资源构成,它们在进程的虚拟空间中动态加载,特别的,DLL中的导出函数就像对外的开放接口,等待外部调用。调用与管理在Win32环境中,全局变量在进程内部独享,共享内存则需通过映射文件或共享数据段。调用DLL的方式有多种,静态链接虽简洁但缺乏灵活性,隐式调用则更灵活,但...

相似回答
大家正在搜