请问一般制作DLL文件的步骤及格式是什么?
我在一个DLL文件其中的一个头文件里看见这样的开头:
#ifndef STRICT
#define STRICT
#endif
而有的头文件开头是这样的:
#ifndef ZHU_H
#define ZHU_H
#else
这两者有何区别?
在DLL文件的制作中,如下开头:
#ifdef ZHU_EXPORTS
#define ZHU_API __declspec(dllexport)
#else
#define ZHU_API __declspec(dllimport)
#endif
有何含义?其中此文件的名字是否一定要为"ZHU.h"?
我在一个DLL文件其中的一个头文件里看见这样的开头:
#ifndef STRICT
#define STRICT
#endif
而有的头文件开头是这样的:
#ifndef ZHU_H
#define ZHU_H
#else
这两者有何区别?
在DLL文件的制作中,如下开头:
#ifdef ZHU_EXPORTS
#define ZHU_API __declspec(dllexport)
#else
#define ZHU_API __declspec(dllimport)
#endif
有何含义?其中此文件的名字是否一定要为"ZHU.h"?
解决方案 »
- 请教:两个多边形A与B相交后,想要得到一个新的多边形C,怎么实现?
- 求...支持RS232和以太网通迅的网络编程思路!急...
- 如何利用鼠标钩子实现获取某一控件的caption、任意窗体的caption呢!
- 怎样设置表格控件每一个单元格字体的颜色。
- 寻SOCKET事件驱动的I/O操作的代码
- 请问如果要读取win2000的注册表中网卡的Domain,NameServer等信息要读取注册表中那个键?
- 请问初始化(init)的反义词是什么?
- 如何格式化一个HTTP请求呢
- 直接访问DX DRAW的页面无论如何都会出错?
- MFC中鼠标拖拉最大化变为Normal时调用了哪个消息?
- 将当前时间转换成字符串,精确到毫秒!!!
- 求救:service中处了"The memory could not be writted"错误,怎么办呀
//mydll.cpp
...
...
...
//系统生成的代码的最后
int __stdcall myfun()
{
return 1;
}在DEF文件中导出函数
//mydll.def
...
...
...
//系统生成的代码的最后
myfun @ 1
分别定义WINAPI,一个输出,一个输入
extern "C" _declspec( dllexport ) 函数类型 函数名(参数);
再实现他就可以了
#define ZHU_API __declspec(dllexport)
#else
#define ZHU_API __declspec(dllimport)
#endif
这种定义是告诉DLL程序如果定义了ZHU_EXPORTS标识符那么ZHU_API就为导出,如果没有定义则为导入;其意义是让DLL程序明确你导出什么类、函数等。如果你要导出,一般在DLL的预编译头文件中添加“define ZHU_EXPORTS”;而exe应用程序中没有这个定义,则它调用你的类就表示导入而非导出。
#ifndef STRICT
#define STRICT
......
#endif
或者相关的,属于头文件的Guardern,能够保证你的头文件只被加载一次,从而避免头文件中
的内容被重定义。这是一种很长见的头文件定义。在C,C++都是这样用的。之所以大家用
Wizard生成的头文件不论你怎么加都不会出现重复定义的错,是因为Wizard已经帮你生成了
上述的代码,但是它生成的更好,定义的MACRO中加入了GUID,这就保证了你定义的宏在概率
上说是唯一的。
至于宏的取名可以随意,当然VC中的习惯是
例如
#ifndef _WINSNMP__H_
#define _WINSNMP__H_FuncA();
#endif//_WINSNMP__H_至于
#ifdef ZHU_EXPORTS
#define ZHU_API __declspec(dllexport)
#else
#define ZHU_API __declspec(dllexport)#endif主要是为了方便dll的隐式调用的时候使用dll的程序可以直接把dll中的头文件拿过来
对于dll,它的Project Setting中一定定义了ZHU_EXPORTS,这样,就会将ZHU_API转换成
__declspec(dllexport),在exe中,没定义,因此就变成了dllimport,这种定义主要是为了
方便。其实你直接使用__declspec(dllexport),__declspec(dllexport)也可以