⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ef.h

📁 易语言IDE源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
#define EF_CURRENT_LIB_FORMAT_VER  EF_LIB_FORMAT_VER_1

struct EFLibInfo
{
    #define EF_S_LIB_IS_EFLIB  (1 << 0)  // 标志是否为EF本身编写的类库

    _EF_DEFINE_GENERAL_INFO;

    EFInt m_nFormatVersion;  // 本结构的格式版本号,以备以后更改本数据结构的格式用.

	EF_LanguageType m_nLanguage;  // 库中所有文本所使用的语言。
    EFDWord m_dwSupportedOS;      // 记录本库具有哪些操作系统支持版本。
    EFDouble m_dbVersion;         // 库的版本号
	EFInt m_nBuildNumber;
		// 库构建版本号,无需对此版本号作任何处理。
		// 本版本号仅用作区分相同正式版本号的系统软件(譬如仅仅修改了几个 BUG,不值得升级正式版本的系统软件)。
        // 任何公布过给用户使用的版本其构建版本号都应该不一样。 赋值时应该顺序递增。

	EFChar* m_szzTypeInfoCategory;  // 数据类型的类别说明表,中间用'\0'分隔,最后用'\0'结束,格式如:"算术\0逻辑\0\0"
	EFChar* m_szzDependFiles;       // 本库正常运行所需要依赖的其他辅助文件名,中间用'\0'分隔,最后用'\0'结束,格式如:"c:\\abc.txt\0d:\\bcd.txt\0\0"

    EFChar* m_szStarterClassName;   //   启动类名称,当从命令行启动类库时候将自动载入库中的具有本成员名称的类,
                                    // 然后执行其中名称为EF_NAME_MAIN_METHOD的方法。

    EF_PFN_GET_TYPE_INFOS m_pfnGetTypeInfos;
    EF_PFN_FIND_TYPE_INFO m_pfnFindTypeInfo;
    EF_PFN_NOTIFY_LIB m_pfnNotifyLib;  // 接收运行时环境通知的函数,不能为NULL
    
    EFChar* m_szAuthor;  // 库的作者
	EFChar* m_szOther;   // 其它信息,比如版权信息、网址等。

    // 如果标志EF_S_LIB_IS_EFLIB被置位,则下面两成员必须填写,否则不需要填写。
    EFInt m_nTypesCountInELib;
    EFTypeInfo** m_ppTypesInfoInELib;

    // 用作保留关于此库的自定义信息
    EFInt m_nCustomData;
};
typedef struct EFLibInfo EFLibInfo;


//////////////////////////////////////////////////////////////////////////

class _EF_TypeInfoRecorder
{
public:
    _EF_TypeInfoRecorder (EFTypeInfo* pBaseTypeInfo);

    static void CleanUp ();

    static EF_Text2PtrHashmap* sm_pBaseTypeInfoTable;
};

class _EF_TypeInfoCleaner
{
public:
    _EF_TypeInfoCleaner ()  { }
    ~_EF_TypeInfoCleaner ()
    {
        _EF_TypeInfoRecorder::CleanUp ();
    }
};

//////////////////////////////////////////////////////////////////////////


#define EF_METHOD_TABLE(class_en_name)           _ef_method_table_of_##class_en_name
#define EF_METHOD_COUNT(class_en_name)           (sizeof (_ef_method_table_of_##class_en_name) / sizeof (_ef_method_table_of_##class_en_name [0]))

#define EF_FIELD_TABLE(class_en_name)            _ef_field_table_of_##class_en_name
#define EF_FIELD_COUNT(class_en_name)            (sizeof (_ef_field_table_of_##class_en_name) / sizeof (_ef_field_table_of_##class_en_name [0]))

#define EF_EXPORT_EVENT_TABLE(class_en_name)     _ef_export_event_table_of_##class_en_name
#define EF_EXPORT_EVENT_COUNT(class_en_name)     (sizeof (_ef_export_event_table_of_##class_en_name) / sizeof (_ef_export_event_table_of_##class_en_name [0]))

#define EF_FRIENDLY_NAME_TABLE(class_en_name)        _ef_friendly_name_table_of_##class_en_name
#define EF_FRIENDLY_NAME_COUNT(class_en_name)        (sizeof (_ef_friendly_name_table_of_##class_en_name) / sizeof (_ef_friendly_name_table_of_##class_en_name [0]))

#define EF_INTERFACE_IMPLEMENT_TABLE(class_en_name)  _ef_interface_implement_table_of_##class_en_name
#define EF_INTERFACE_IMPLEMENT_COUNT(class_en_name)  (sizeof (_ef_interface_implement_table_of_##class_en_name) / sizeof (_ef_interface_implement_table_of_##class_en_name [0]))

#define EF_ENUM_ITEM_TABLE(enum_en_name)    _ef_enum_item_table_of_##enum_en_name
#define EF_ENUM_ITEM_COUNT(enum_en_name)    (sizeof (_ef_enum_item_table_of_##enum_en_name) / sizeof (_ef_enum_item_table_of_##enum_en_name [0]))

///////////////////////////////////

#define EF_BEGIN_DEFINE_ARG_TABLE(class_en_name, method_en_name)  EF_STATIC EFArgInfo _ef_arg_table_of_##class_en_name##_##method_en_name [] = {

#define EF_ARG_HASPROP(name, help_string, state, properties_list, data_type) \
            {  state, name, help_string, properties_list, EF_GetStrHash (name), 0, data_type, EF_GetStrHash (data_type), { 0 } }

#define EF_ARG(name, help_string, state, data_type) \
            EF_ARG_HASPROP(name, help_string, state, myT(""), data_type)

#define EF_ARG_HAS_DEFAULT(name, help_string, state, data_type, default_value) \
            {  state|EF_S_ARG_HAS_DEFAULT_VALUE, name, help_string, myT(""), EF_GetStrHash (name), 0, data_type, EF_GetStrHash (data_type), { (int)(default_value) } }

#define EF_END_DEFINE_ARG_TABLE  };

///////////////////////////////////

#define EF_BEGIN_DEFINE_FIELD_TABLE(class_en_name)  EF_STATIC EFFieldInfo _ef_field_table_of_##class_en_name [] = {

#define EF_FIELD_HASPROP(name, help_string, state, properties_list, data_type) \
            {  state, name, help_string, properties_list, EF_GetStrHash (name), 0, data_type, EF_GetStrHash (data_type), { 0 }, { 0 }  }

#define EF_FIELD(name, help_string, state, data_type) \
        EF_FIELD_HASPROP (name, help_string, state, myT (""), data_type)

#define EF_END_DEFINE_FIELD_TABLE  };

///////////////////////////////////

#define EF_BEGIN_DEFINE_INTERFACE_IMPLEMENT_TABLE(class_en_name)  EF_STATIC EFInterfaceItem _ef_interface_implement_table_of_##class_en_name [] = {

#define EF_IMPLEMENT_INTERFACE(interface_name, func_count, func_tab) \
            {  interface_name, EF_GetStrHash (interface_name), 0, func_count, func_tab, NULL  }

#define EF_END_DEFINE_INTERFACE_IMPLEMENT_TABLE  };

///////////////////////////////////

#define EF_BEGIN_DEFINE_METHOD_TABLE(class_en_name)  EF_STATIC EFMethodInfo _ef_method_table_of_##class_en_name [] = {

#define EF_END_DEFINE_METHOD_TABLE  };

#define EF_METHOD_HASPROP(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  state, method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name) / sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name [0]), _ef_arg_table_of_##class_en_name##_##method_en_name, (EF_PFUNC)class_en_name##_##method_en_name, NULL  }

#define EF_METHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  state, method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), 0, (EFArgInfo*)0, (EF_PFUNC)class_en_name##_##method_en_name, NULL  }

#define EF_METHOD(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_METHOD_HASPROP(class_en_name, method_en_name, method_name,  method_friend_name, help_string, state, myT(""), return_datatype)

#define EF_METHOD_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_METHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, myT(""), return_datatype)

#define EF_PMETHOD_HASPROP(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  (EF_S_PUBLIC | state), method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name) / sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name [0]), _ef_arg_table_of_##class_en_name##_##method_en_name, (EF_PFUNC)class_en_name##_##method_en_name, NULL  }

#define EF_PMETHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  (EF_S_PUBLIC | state), method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), 0, (EFArgInfo*)0, (EF_PFUNC)class_en_name##_##method_en_name, NULL  }

#define EF_PMETHOD(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_PMETHOD_HASPROP(class_en_name, method_en_name, method_name,  method_friend_name, help_string, state, myT(""), return_datatype)

#define EF_PMETHOD_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_PMETHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, myT(""), return_datatype)

///////////////////////////////////

#define EF_INTERFACE_METHOD_HASPROP(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  state, method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name) / sizeof (_ef_arg_table_of_##class_en_name##_##method_en_name [0]), _ef_arg_table_of_##class_en_name##_##method_en_name, (EF_PFUNC)NULL, NULL  }

#define EF_INTERFACE_METHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, properties_list, return_datatype) \
            {  state, method_name, help_string, properties_list, EF_GetStrHash (method_name), 0, method_friend_name, EF_GetFriendlyNameHash (method_friend_name), return_datatype, EF_GetStrHash (return_datatype), 0, (EFArgInfo*)0, (EF_PFUNC)NULL, NULL  }

#define EF_INTERFACE_METHOD(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_INTERFACE_METHOD_HASPROP(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, myT(""), return_datatype)

#define EF_INTERFACE_METHOD_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, return_datatype) \
            EF_INTERFACE_METHOD_HASPROP_NOARG(class_en_name, method_en_name, method_name, method_friend_name, help_string, state, myT(""), return_datatype)

///////////////////////////////////

#define EF_BEGIN_DEFINE_EXPORT_EVENT_TABLE(class_en_name)  EF_STATIC EFChar* _ef_export_event_table_of_##class_en_name [] = {

#define EF_EXPORT_EVENT(event_class_name)  event_class_name

#define EF_END_DEFINE_EXPORT_EVENT_TABLE  };

///////////////////////////////////

#define EF_BEGIN_DEFINE_ENUM_ITEM_TABLE(enum_en_name)  EF_STATIC EFEnumItem _ef_enum_item_table_of_##enum_en_name [] = {

#define EF_ENUM_ITEM_HASPROP(enum_item_name, help_string, state, properties_list, value)  \
    {  state, enum_item_name, help_string, properties_list, EF_GetStrHash (enum_item_name), 0, value }

#define EF_ENUM_ITEM(enum_item_name, value, help_string)  \
    EF_ENUM_ITEM_HASPROP (enum_item_name, help_string, EF_S_PUBLIC, myT (""), value)

#define EF_ENUM_ITEM_WITH_STATE(enum_item_name, value, help_string, state)  \
    EF_ENUM_ITEM_HASPROP (enum_item_name, help_string, state, myT (""), value)

#define EF_END_DEFINE_ENUM_ITEM_TABLE  };

///////////////////////////////////

// EF_DEFINE_CLASS_INFO and EF_DEFINE_ENUM_INFO must be used in .cpp (not .h) file.

#define EF_DEFINE_CLASS_INFO_HAS_REF_DATA_GETTER(version, class_en_name, class_name, help_string, base_class_name, interface_implement_count, interface_implement_table, state, category_index, properties_list, class_init_func, object_init_func, object_clean_func, ref_data_getter_func, method_count, method_table, element_count, element_table, export_event_count, export_event_table)  \
        EFClassInfo _ef_class_info_of_##class_en_name = {  \
                state,                          \
                class_name,                     \
                help_string,                    \
                properties_list,                \
                EF_GetStrHash (class_name),     \
                0,                              \
                &ef_LibInfo,                    \
                EF_TT_CLASS,                    \
                version,                        \
                category_index,                 \
                _EF_CURRENT_COMPILER,           \
                base_class_name,                \
                EF_GetStrHash (base_class_name),\
				interface_implement_count,      \
				interface_implement_table,      \
                class_init_func,                \
                object_init_func,               \
                object_clean_func,              \
                ref_data_getter_func,           \
                method_count,                   \
                method_table,                   \
                element_count,                  \
                element_table,                  \
                export_event_count,             \
                export_event_table              \
        };                                      \
        EF_STATIC _EF_TypeInfoRecorder _ef_class_info_recorder_of_##class_en_name ((EFTypeInfo*)&_ef_class_info_of_##class_en_name);

// 定义类
#define EF_DEFINE_CLASS_INFO(version, class_en_name, class_name, help_string, base_class_name, interface_implement_count, interface_implement_table, state, category_index, properties_list, class_init_func, object_init_func, object_clean_func, method_count, method_table, element_count, element_table, export_event_count, export_event_table)  \
    EF_DEFINE_CLASS_INFO_HAS_REF_DATA_GETTER(version, class_en_name, class_name, help_string, base_class_name, interface_implement_count, interface_implement_table, state, category_index, properties_list, class_init_func, object_init_func, object_clean_func, NULL, method_count, method_table, element_count, element_table, export_event_count, export_event_table)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -