![[全国]PKPM入门培训一培训大纲(共38页)_第1页](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5491.gif)
![[全国]PKPM入门培训一培训大纲(共38页)_第2页](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5492.gif)
![[全国]PKPM入门培训一培训大纲(共38页)_第3页](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5493.gif)
![[全国]PKPM入门培训一培训大纲(共38页)_第4页](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5494.gif)
![[全国]PKPM入门培训一培训大纲(共38页)_第5页](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5495.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PKPM 入门培训 CFG编程培训讲义一刘 岩2015年8月基本内容开发平台介绍常见系统架构主程序开发插件DLL开发C+/Fortran混合编程PKPM编码规范开发环境开发平台Visual Studio 6.0 Compaq Visual Fortran 6.0MSDN 2001 Oct(MicroSoft Developer Network )系统SDK(Software Development Kit )CFG图形平台(cfg35/55)执行命令一般系统架构图形平台CFG公共模块ComData插件管理基础平台主应用程序EXE插件1 dll插件 dll插件N发送消息注册命令主程序开发主程序一
2、般是一个基于MFC的EXE程序主要工作:初始化Cfg图形环境加载菜单加载插件处理命令循环使用“CFG程序向导”可以简化规范操作,从CFGApp派生出App类,重载相关虚函数即可。命令行右侧菜单主菜单绘图区工具条插件列表主程序开发class lyExeManageApp : public CFGApp public:virtual BOOL OnRunCommand(const char *cmd);virtual void OnAppExit();virtual BOOL OnQueryAppExit();virtual void OnAppInit();virtual BOOL OnDraw
3、WindowContextMenu(CPoint point);virtual BOOL PreTranslateMessage(MSG *pMsg);virtual void OnScreenMenuExpanded(const char*idMenu, const char*text,BOOL bExpand);主程序开发void lyExeManageApp:OnAppInit()CFGApp:IRegisterAppName (PKPM_MANAGE) ;/初始化CFGInitCFG();/装载图像资源CFGApp:LoadCmdImageDLL(PKPMRES.dll);/装载命令定
4、义文件,可多次装载CFGApp:LoadCmdFile(MENU/lyExeManage.cm);/加载dll, 在加载菜单之前加载dllLoadUserDll();/装载菜单文件LoadUserMenu();主程序开发BOOL lyExeManageApp:OnRunCommand(const char *cmd)if(IsPluginCmd(cmd)/执行插件中的命令RunPluginCommand(cmd);elseRunUserCommand(cmd);/RunInnerCommand(cmd);return TRUE;主程序开发void lyExeManageApp:OnScreen
5、MenuExpanded( const char *idMenu, const char *text, BOOL bExpand)/向dll发送command执行消息FirePluginEvent(CMT_MENUEXPAND, text);return;主程序开发BOOL lyExeManageApp:OnQueryAppExit()HWND wnd = (HWND)AfxGetMainWnd();LPCTSTR szText = 退出程序?;if(IDYES=MessageBox()CFGApp:ExitApp(0); return TRUE;return FALSE;主程序开发void
6、lyExeManageApp:OnAppExit()FirePluginEvent(CMT_QUIT,NULL);CLOSELYUTIL();for(int i=0;iClosfl(NU1);FreeCFG();/清除CFGreturn;CFG文档Y:软件开发结构室刘岩PKPM培训CFG开发文档2008_HELP插件开发插件的本质(Dynamic Link Library)一个符合约定规范的DLL插件DLL的简化开发使用PlugCmd辅助类(PlugCmd.h/PlugCmd.cpp)修改插件标识注册消息响应函数注册插件命令插件开发消息响应函数/命令函数接口typedef int (*MNGR
7、_CALLBACK)(LPVOID cmdPara);特点:返回值为整数有一个LPVOID类型的参数插件开发class PzcdStatCmdstatic int OnLoad(LPVOID cmdPara);static int OnUnload(LPVOID cmdPara);static int OnLayerChange(LPVOID cmdPara);static int OnQuit(LPVOID cmdPara);static int OnSave(LPVOID cmdPara);static int OnMenuExpand(LPVOID cmdPara);static voi
8、d RegisterMyCmds();插件开发/ 插件命令static int PZCD_JsgzTF(LPVOID cmdPara); /计算规则static int PZCD_RoomTZ(LPVOID cmdPara); /房间特征static int PZCD_RoomTZDel(LPVOID cmdPara);/删除static int PZCD_ShowGCL(LPVOID cmdPara);/查工程量static int PZCD_BaseInfo(LPVOID cmdPara); /基本情况DECLARE_CMDMNGR_MSGMAP();插件开发-消息响应BEGIN_CMDM
9、NGR_MSGMAP(Stat2Cmd,CMT_DEMO_BASE)/AFX_CMDMNGR_MSGMAP(PzcdStatCmd)ON_CMDMNGR_CMD(CMT_LOAD, OnLoad)ON_CMDMNGR_CMD(CMT_UNLOAD, OnUnload)ON_CMDMNGR_CMD(CMT_REDRAW, OnRedraw)ON_CMDMNGR_CMD(CMT_MENUEXPAND,OnMenuExpand)ON_CMDMNGR_CMD(CMT_MENUCOLLAPSE,OnMenuCollapse)ON_CMDMNGR_CMD(CMT_SAVE,OnSave)ON_CMDMNG
10、R_CMD(CMT_SETHANDLE,OnSetHandle)/AFX_CMDMNGR_MSGMAPEND_CMDMNGR_MSGMAP()ON_CMDMNGR_CMD(消息代码, 消息响应函数)插件开发-命令注册void Stat2Cmd:RegisterMyCmd() RegisterCmd(PLUG_SIG,ZX_ROOMTZ,PZCD_RoomTZ); RegisterCmd(PLUG_SIG,ZX_TZDEL,PZCD_RoomTZDel); RegisterCmd(PLUG_SIG,ZX_PZGCL,PZCD_ShowGCL); RegisterCmd(PLUG_SIG,ZX_J
11、BQK,PZCD_BaseInfo); RegisterCmd(PLUG_SIG,PZCD_POLY,PZCD_POLYMNGR); RegisterCmd(PLUG_SIG,PZCD_DE,PZCD_SETDE);RegisterCmd(插件组名,命令字符串,函数指针);插件开发注意事项消息是对所有插件广播,插件应该只在本模块处于活动状态时候响应处理函数CMT_LOAD由插件管理器自动发送,插件在本消息响应中应该只进行注册函数等工作,数据初始化等业务逻辑应该置CMT_INIT或者展开菜单CMT_MENUEXPAND中处理。CMT_UNLOAD中只处理命令反注册,数据清理等业务动作应该在CMT
12、_QUIT或者CMT_MENUCOLLAPSE中处理PKPM编码规范PKPM编码规范点击图片打开具体内容RTTI:Runtime Type Information,运行时类型信息,提供了运行时确定对象类型的方法 Fortran与C+的混合编程C+与Fortran间函数调用C+调用Fortran函数 (无字符串参数)C+调用Fortran函数 (有字符串参数)Fortran直接调C+函数 (无字符串参数)Fortran直接调C+函数 (有字符串参数)Fortran通过interface接口调C+函数C+调用Fortran函数(1)不带字符串参数的Fortran函数SUBROUTINE FUNCN
13、AME(IOD,IND)C+中如下声明:extern C void _stdcall FUNCNAME(int* IOD,int* IND);C+注意问题: C+中的FUNCNAME必须大写参数如果常量可以用引用,需改变值,用指针C+调用Fortran函数(2)带字符串的Fortran函数SUBROUTINE FUNCNAME(IOD,IND,name)C+中声明: C void _stdcall FUNCNAME(int* IOD,int* IND,char* name,int* len);注意:Fortran的字符串参数有隐含的长度参数Fortran调用C+函数(1)直接调用(参数中没有c
14、har类型的)C+声明:extern C void _stdcall FUNCNAME (int* nType,int* ns)fortran中的调用CALL FUNCNAME (nType,ns)注意:C+中FUNCNAME必须大写Fortran调用C+函数(2)直接调用(参数中有char类型的)C+中声明如下:extern C void _stdcall FUNCNAME (int* nType,int* ns,char name,int* len )Fortran中调用CALL FUNCNAME (nType,ns,name)注意:C+中FUNCNAME必须大写Fortran调用C+函数
15、(3)通过interface接口调用C+中声明如下:extern C void FUNCNAME (int nType,int* ns,char* name)Fortran调用C+函数(3)Fortran声明:interfacesubroutine FUNCNAME ( nt,ns,name)!MS$ATTRIBUTES VALUE : nt!MS$ATTRIBUTES REFERENCE : ns!MS$ATTRIBUTES REFERENCE : nameCHARACTER name*(*)end subroutine end interfaceFortran中的调用CALL FUNCNA
16、ME (nt,ns,name)公共区数据的传递Fortran中的声明:COMMON/TESTCOMM1/iStartJD(25),iPaoNum(25)C+中的声明:extern “C”#pragma pack(2)/数据对齐方式struct my1 int iStartJD25; int iPaoNum25;extern struct my1 TESTCOMM1;#pragma pack();Fortran/C+中常用数据类型对比Fortran数据类型C数据类型INTEGER(1) charINTEGER(2)shortINTEGER(4)int(long)REAL(4)floatREAL(8)doubleFORTRAN和C数组比较C的第一个元素以0为索引,Fortran以1为索引多维数组,Fortran最左边的索引变化最快(以列为主),C最右边的索引变化最快(以行为主)对于一个定义为X23的数组:Fortran前四个元素为:(1,1),X(2,1),X(3,1),X(1,2)C为:X00,X01,X02,X10为保证元素顺序的一致,C中一个定义为X23的数组, Fortran中应声明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盗取高考试题及答案
- 定量决策考试题及答案
- 安全舆论面试题及答案
- vue面试题题及答案
- 技术专栏面试题及答案
- 广告运营面试题及答案
- 点评题目面试题及答案
- 财务人员的工作总结
- 《宋明理学》教学设计
- 焊锡生产设备转让协议书
- 医疗收费收据样式(医院基层)
- 2024年北京市中考物理模拟卷(一)
- MOOC 金融法学-浙江财经大学 中国大学慕课答案
- 浙江省杭州市上城区2022-2023学年六年级下学期期末语文试题
- MOOC 从china到China:中国陶瓷文化三十讲-景德镇陶瓷大学 中国大学慕课答案
- 安徽省芜湖市2022-2023学年高一上学期期末教学质量统测物理试题 含解析
- 崇尚科学拒绝宗教
- 年产5万吨丁苯橡胶的工艺设计样本
- 手术室预防坠床课件
- 人力资源管理公司经营分析报告
- 《复兴号动车组》课件
评论
0/150
提交评论