易语言支持库制作学习笔记_第1页
易语言支持库制作学习笔记_第2页
易语言支持库制作学习笔记_第3页
易语言支持库制作学习笔记_第4页
易语言支持库制作学习笔记_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

)VS2008,MFCDLL,mylib,(debugrelease模式的配置项)项目属性->常规->字符集设置为多字节字符集项目属性->C++选项卡->附加包含目录填入sdkElib目录,如我的Elib目录是#include<lib2.h>#include<lang.h>#include<fnshare.h>#includefnshare.cpp>这段代码是定义模块信息的,只在动态模块中使用,所以加入宏E_STATIC_LIB来定义。C++->E_STATIC_LIB#ifndefE_STATIC_LIBstaticLIB_INFOLibInfo/*{库格式号,GUID串号,主版本号,次版本号,构建版本号,系统主版本号,系统次版本号,核心库主版本号,核心库次版本号,支持库名,支持库语言,支持库描述,支持库状态作者姓名,邮政编码,通信地址,电话号码,传真号码,电子邮箱,主页地址,其它信息,类型数量,类型指针,类别数量,命令类别,命令总数,命令指针,命令入口,附加功能,功能描述,消息指针,超级模板,模板描述,常量数量,常量指针,外部文件}*/ GBK_LANG_VER, _LIB_OS( _WT(LIB_Fax),_WT(LIB_Email),_WT(LIB_HomePage),_WT(LIB_Other), NULL,NULL,mylib_ProcessNotifyLib,NULL,NULL,sizeof(Consts)/sizeof(Consts[0]),Consts,NULLPLIB_INFOWINAPIreturn注意:GetNewInf是易语言动态库(dll)唯一必须导出的函数。所以需要在.def文件里定义;LIB_INFO是如何定义的。具体含义可以在开发文档里察看。这里根据模LIB_mylib.h中如下:#ifndefE_STATIC_LIB {00000000-0000-0000,guidgen.exe生成*/#defineLIB_MajorVersion1/*库主版本号*//#defineLIB_BuildNumber20110318*构建版本号*/#defineLIB_SysMajorVer3/*系统主版本号*/#defineLIB_SysMinorVer0/*系统次版本号*/#defineLIB_KrnlLibMajorVer3/*核心库主版本号*/#defineLIB_KrnlLibMinorVer0/*核心库次版本号*/#defineLIB_NAME_STR支持库名称*支持库名*/#defineLIB_DESCRIPTION_STR支持库功能描述*功能描述*/#defineLIB_Author"作者名称"/*作者名称*/#defineLIB_ZipCode"邮政编码"/*邮政编码*/#defineLIB_Address"通信地址"/*通信地址*/#defineLIB_Phone"电话号码"/*电话号码*/#defineLIB_Fax"传真号码"/*传真号码*/#defineLIB_Email"电子邮箱"/*电子邮箱*/#defineLIB_HomePage主页地址*主页地址*/#defineLIB_Other"其它信息"/*其它信息*/#defineLIB_TYPE_COUNT1/*命令数量*/#defineLIB_TYPE_STR0000基本命令\0""\0*命令分类*/ ])Commands命令类别,ExecuteCommand命令指针,Consts常量都是一样的。这些都EXTERN_CINTWINAPImylib_ProcessNotifyLib(INTnMsg,DWORDdwParam1,DWORDdwParam2)#ifndefif(nMsg==NL_GET_CMD_FUNC_NAMES)//返回所有命令实现函数的的函数名称数组(char*[]),支持静态编译的动态库必须处理returnelseif(nMsg==NL_GET_NOTIFY_LIB_FUNC_NAME)//返回处理系统通知的函数名称(PFN_NOTIFY_LIB函数名称),支持静态编译的动态库必须处理returnelseif(nMsg==NL_GET_DEPENDENT_LIBS)return//返回静态库所依赖的其它静态库文件名列表(格式为\0分隔的文本,结尾两个\0),支持静态编译的动态库必须处理kernel32.libuser32.libgdi32.lib//NULLNR_ERRreturnProcessNotifyLib(nMsg,dwParam1,IDE或者运行时环境的通知。并且在编译的时候起到在静mylib_ProcessNotifyLib#ifndef定义常量Consts#ifndefE_STATIC_LIBLIB_CONST_INFOConsts[]/*{中文名称,英文名称,常量布局,常量等级(LVL_),参数类型(CT_),文本内容,数值内容}*/_WT("常量_ZERO"),_WT("ZERO"),NULL,LVL_SIMPLE,CT_NUM,NULL,0},//_WT("常量_TEST_WT("TESTNULLLVL_HIGH,CT_TEXTTESTNULL常量等级有//////参数类型有//sample://sample://sample:DataTypes#ifndefE_STATIC_LIB/*{中文名称,英文名称,数据描述,索引数量,命令索引,对象状态,图标索引,事件数量,事件指针,属性数量,属性指针,界面指针,元素数量,元素指针}*/{_WT数据类型命令"),_WT("DatatypeCommand"),_WT测试数据类型命令。"),DatatypeCommandIndexs,NULL,0,0,NULL,0,NULL,NULL,0,NULL关于LIB_DATA_TYPE_INFO的解释以及窗口型数据的定义都可参见开发文档EXTERN_Cvoidmylib_函数名(PMDATA_INFpRetData,INTiArgCount,PMDATA_INFpRetDataCMD_INFOm_dtRetType为_SDT_NULL(即定义无返回值)时,pRetData无效;iArgCountpArgInf#ifndefE_STATIC_LIBPFN_EXECUTE_CMDExecuteCommand[]=mylib_//staticconstchar*constCommandNames[]"mylib_函数名ARG_INFOCommandArgs[]/*{参数名称,参数描述,图像索引,图像数量,参数类型(SDT_),默认数值,参数类别(AS_)}*/_WT("1"),_WT("1"),0,0,SDT_INTNULL,NULL函数参数数组定staticCMD_INFO/*{中文名称,英文名称,对象描述,所属类别(-1是数据类型的方法),命令状态(CT_),返回类型(SDT_),此值保留,对象等级(LVL_),图像索引,图像数量,参数个数,参数信息{_WT("函数名"),_WT("英文函数名"),_WT("函数功能描述"),1,NULL,SDT_BOOL,0,LVL_SIMPLE,0,0,1,CommandArgs},//基本命令函数名前的前缀mylib_mylib的全小写mylib_。参数类型如果 AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY//(MAKEWORD(0,0), MAKELONG(MAKEWORD(1,1), MAKELONG(MAKEWORD(1,2),// MAKELONG(MAKEWORD(1,3), MAKELONG(MAKEWORD(1,4), MAKELONG(MAKEWORD(1,5), MAKELONG(MAKEWORD(1,6),// MAKELONG(MAKEWORD(2,0),// MAKELONG(MAKEWORD(3,0),// MAKELONG(MAKEWORD(4,0), MAKELONG(MAKEWORD(5,0), MAKELONG(MAKEWORD(6,0),//->-mylib_static。程序向导里设置程序类型为"静态库"。去掉预编译头的钩。点击完成。选择动态库列表中的文件,ctrl+Cmylib_staticctrl+Vmylib_static项目属性,release配置。修改配置如下+->+->(resym.exe的工作C++->C++->->+->->D:\E51\sdk\tools\resym.exeallinfile=$(TargetPath)outfile=$(TargetPath)resym.exelib库连接符号的,以解决连接时符号冲突的问题。程序位置设成你sdk所在位置。release编译即可。打开项目管理,点击配置管理器,mylib的配合处下拉菜单选择新建",添入名称release_static,+->+->C++->->_USRDLLC++->->+->->+生成事件->生成后事件->命令行填入你D:\E51\sdk\tools\resym.exeallinfile=$(TargetPath)outfile=$(TargetPath).lib"两数相加",英文名称是"myadd",(12)mylib.cpp#include"stdafx.h"#include"mylib.h"#include<lib2.h>#include<lang.h>#include<fnshare.h>#include<fnshare.cpp>//EXTERN_Cvoidmylib_myadd(PMDATA_INFpRetData,INTiArgCount,PMDATA_INFpRetData->m_float=pArgInf[0].m_float+#ifndefE_STATIC_LIBmylib_myaddstaticconstchar*constCommandNames[]"mylib_myaddARG_INFOCommandArgs[]/*{参数名称,参数描述,图像索引,图像数量,参数类型(SDT_),默认数值,参数类别(AS_)}*/_WT("1_WT("1,小数型00SDT_FLOATNULLNULL函数参数数组_WT("2_WT("2,小数型00SDT_FLOATNULLNULL函数参数数组staticCMD_INFO/*{中文名称,英文名称,对象描述,所属类别(-1是数据类型的方法),命令状态(CT_),返回类型(SDT_),此值保留,对象等级(LVL_),图像索引,图像数量,参数个数,参数信息{_WT两数相加"),_WT("myadd"),_WT两个小数相加求和,返回小数"),1,NULL,SDT_FLOAT,0,LVL_SIMPLE,0,0,2,CommandArgs},//基本命令EXTERN_CINTWINAPImylib_ProcessNotifyLib(INTnMsg,DWORDdwParam1,DWORDdwParam2)#ifndefif(nMsg==returnelseif(nMsg==returnelseif(nMsg==NL_GET_DEPENDENT_LIBS)return(INT)NULL;returnProcessNotifyLib(nMsg,dwParam1,#ifndefE_STATIC_LIBstaticLIB_INFOLibInfo/*{库格式号,GUID串号,主版本号,次版本号,构建版本号,系统主版本号,系统次版本号,核心库主版本号,核心库次版本号,支持库名,支持库语言,支持库描述,支持库状态作者姓名,邮政编码,通信地址,电话号码,传真号码,电子邮箱,主页地址,其它信息,类型数量,类型指针,类别数量,命令类别,命令总数,命令指针,命令入口,附加功能,功能描述,消息指针,超级模板,模板描述,常量数量,常量指针,外部文件}*/LIB_FORMAT_VER,_T(LIB_GUID_STR), GBK_LANG_VER, _LIB_OS( sizeof(Commands)/sizeof(Commands[0]),Commands,ExecuteCommand,NULL,NULL,mylib_ProcessNotifyLib,NULL,NULL,0,NULL,PLIB_INFOWINAPIreturnmylib.h#ifnd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论