请问一般制作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"?

解决方案 »

  1.   

    VC写DLL的方法很简单,只要在*.cpp中写如自己的函数
    //mydll.cpp
    ...
    ...
    ...
    //系统生成的代码的最后
    int __stdcall myfun()
    {
        return 1;
    }在DEF文件中导出函数
    //mydll.def
    ...
    ...
    ...
    //系统生成的代码的最后
    myfun       @ 1
      

  2.   

    很简单,这样可以区分包含头文件的是dll的源代码还是调用者的代码
    分别定义WINAPI,一个输出,一个输入
      

  3.   

    用MFC创建一个动态库模版,声明一个输出的全局函数
    extern "C" _declspec( dllexport ) 函数类型 函数名(参数);
    再实现他就可以了
      

  4.   

    上面三个已经讲述了如果制作DLL文件。下面回答你的问题:#ifdef ZHU_EXPORTS
    #define ZHU_API __declspec(dllexport)
    #else
    #define ZHU_API __declspec(dllimport)
    #endif
    这种定义是告诉DLL程序如果定义了ZHU_EXPORTS标识符那么ZHU_API就为导出,如果没有定义则为导入;其意义是让DLL程序明确你导出什么类、函数等。如果你要导出,一般在DLL的预编译头文件中添加“define ZHU_EXPORTS”;而exe应用程序中没有这个定义,则它调用你的类就表示导入而非导出。
      

  5.   

    其实你说的第一种问题
    #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)也可以