📄 ef.h
字号:
#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 + -