![[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第1頁](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5491.gif)
![[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第2頁](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5492.gif)
![[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第3頁](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5493.gif)
![[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第4頁](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5494.gif)
![[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第5頁](http://file4.renrendoc.com/view/4c834193be1d2f8f6fc2556d4353e549/4c834193be1d2f8f6fc2556d4353e5495.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、PKPM 入門培訓(xùn) CFG編程培訓(xùn)講義一劉 巖2015年8月基本內(nèi)容開發(fā)平臺介紹常見系統(tǒng)架構(gòu)主程序開發(fā)插件DLL開發(fā)C+/Fortran混合編程PKPM編碼規(guī)范開發(fā)環(huán)境開發(fā)平臺Visual Studio 6.0 Compaq Visual Fortran 6.0MSDN 2001 Oct(MicroSoft Developer Network )系統(tǒng)SDK(Software Development Kit )CFG圖形平臺(cfg35/55)執(zhí)行命令一般系統(tǒng)架構(gòu)圖形平臺CFG公共模塊ComData插件管理基礎(chǔ)平臺主應(yīng)用程序EXE插件1 dll插件 dll插件N發(fā)送消息注冊命令主程序開發(fā)主程序一
2、般是一個基于MFC的EXE程序主要工作:初始化Cfg圖形環(huán)境加載菜單加載插件處理命令循環(huán)使用“CFG程序向?qū)А笨梢院喕?guī)范操作,從CFGApp派生出App類,重載相關(guān)虛函數(shù)即可。命令行右側(cè)菜單主菜單繪圖區(qū)工具條插件列表主程序開發(fā)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);主程序開發(fā)void lyExeManageApp:OnAppInit()CFGApp:IRegisterAppName (PKPM_MANAGE) ;/初始化CFGInitCFG();/裝載圖像資源CFGApp:LoadCmdImageDLL(PKPMRES.dll);/裝載命令定
4、義文件,可多次裝載CFGApp:LoadCmdFile(MENU/lyExeManage.cm);/加載dll, 在加載菜單之前加載dllLoadUserDll();/裝載菜單文件LoadUserMenu();主程序開發(fā)BOOL lyExeManageApp:OnRunCommand(const char *cmd)if(IsPluginCmd(cmd)/執(zhí)行插件中的命令RunPluginCommand(cmd);elseRunUserCommand(cmd);/RunInnerCommand(cmd);return TRUE;主程序開發(fā)void lyExeManageApp:OnScreen
5、MenuExpanded( const char *idMenu, const char *text, BOOL bExpand)/向dll發(fā)送command執(zhí)行消息FirePluginEvent(CMT_MENUEXPAND, text);return;主程序開發(fā)BOOL lyExeManageApp:OnQueryAppExit()HWND wnd = (HWND)AfxGetMainWnd();LPCTSTR szText = 退出程序?;if(IDYES=MessageBox()CFGApp:ExitApp(0); return TRUE;return FALSE;主程序開發(fā)void
6、lyExeManageApp:OnAppExit()FirePluginEvent(CMT_QUIT,NULL);CLOSELYUTIL();for(int i=0;iClosfl(NU1);FreeCFG();/清除CFGreturn;CFG文檔Y:軟件開發(fā)結(jié)構(gòu)室劉巖PKPM培訓(xùn)CFG開發(fā)文檔2008_HELP插件開發(fā)插件的本質(zhì)(Dynamic Link Library)一個符合約定規(guī)范的DLL插件DLL的簡化開發(fā)使用PlugCmd輔助類(PlugCmd.h/PlugCmd.cpp)修改插件標(biāo)識注冊消息響應(yīng)函數(shù)注冊插件命令插件開發(fā)消息響應(yīng)函數(shù)/命令函數(shù)接口typedef int (*MNGR
7、_CALLBACK)(LPVOID cmdPara);特點:返回值為整數(shù)有一個LPVOID類型的參數(shù)插件開發(fā)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();插件開發(fā)/ 插件命令static int PZCD_JsgzTF(LPVOID cmdPara); /計算規(guī)則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();插件開發(fā)-消息響應(yīng)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(消息代碼, 消息響應(yīng)函數(shù))插件開發(fā)-命令注冊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(插件組名,命令字符串,函數(shù)指針);插件開發(fā)注意事項消息是對所有插件廣播,插件應(yīng)該只在本模塊處于活動狀態(tài)時候響應(yīng)處理函數(shù)CMT_LOAD由插件管理器自動發(fā)送,插件在本消息響應(yīng)中應(yīng)該只進(jìn)行注冊函數(shù)等工作,數(shù)據(jù)初始化等業(yè)務(wù)邏輯應(yīng)該置CMT_INIT或者展開菜單CMT_MENUEXPAND中處理。CMT_UNLOAD中只處理命令反注冊,數(shù)據(jù)清理等業(yè)務(wù)動作應(yīng)該在CMT
12、_QUIT或者CMT_MENUCOLLAPSE中處理PKPM編碼規(guī)范PKPM編碼規(guī)范點擊圖片打開具體內(nèi)容RTTI:Runtime Type Information,運(yùn)行時類型信息,提供了運(yùn)行時確定對象類型的方法 Fortran與C+的混合編程C+與Fortran間函數(shù)調(diào)用C+調(diào)用Fortran函數(shù) (無字符串參數(shù))C+調(diào)用Fortran函數(shù) (有字符串參數(shù))Fortran直接調(diào)C+函數(shù) (無字符串參數(shù))Fortran直接調(diào)C+函數(shù) (有字符串參數(shù))Fortran通過interface接口調(diào)C+函數(shù)C+調(diào)用Fortran函數(shù)(1)不帶字符串參數(shù)的Fortran函數(shù)SUBROUTINE FUNCN
13、AME(IOD,IND)C+中如下聲明:extern C void _stdcall FUNCNAME(int* IOD,int* IND);C+注意問題: C+中的FUNCNAME必須大寫參數(shù)如果常量可以用引用,需改變值,用指針C+調(diào)用Fortran函數(shù)(2)帶字符串的Fortran函數(shù)SUBROUTINE FUNCNAME(IOD,IND,name)C+中聲明: C void _stdcall FUNCNAME(int* IOD,int* IND,char* name,int* len);注意:Fortran的字符串參數(shù)有隱含的長度參數(shù)Fortran調(diào)用C+函數(shù)(1)直接調(diào)用(參數(shù)中沒有c
14、har類型的)C+聲明:extern C void _stdcall FUNCNAME (int* nType,int* ns)fortran中的調(diào)用CALL FUNCNAME (nType,ns)注意:C+中FUNCNAME必須大寫Fortran調(diào)用C+函數(shù)(2)直接調(diào)用(參數(shù)中有char類型的)C+中聲明如下:extern C void _stdcall FUNCNAME (int* nType,int* ns,char name,int* len )Fortran中調(diào)用CALL FUNCNAME (nType,ns,name)注意:C+中FUNCNAME必須大寫Fortran調(diào)用C+函數(shù)
15、(3)通過interface接口調(diào)用C+中聲明如下:extern C void FUNCNAME (int nType,int* ns,char* name)Fortran調(diào)用C+函數(shù)(3)Fortran聲明:interfacesubroutine FUNCNAME ( nt,ns,name)!MS$ATTRIBUTES VALUE : nt!MS$ATTRIBUTES REFERENCE : ns!MS$ATTRIBUTES REFERENCE : nameCHARACTER name*(*)end subroutine end interfaceFortran中的調(diào)用CALL FUNCNA
16、ME (nt,ns,name)公共區(qū)數(shù)據(jù)的傳遞Fortran中的聲明:COMMON/TESTCOMM1/iStartJD(25),iPaoNum(25)C+中的聲明:extern “C”#pragma pack(2)/數(shù)據(jù)對齊方式struct my1 int iStartJD25; int iPaoNum25;extern struct my1 TESTCOMM1;#pragma pack();Fortran/C+中常用數(shù)據(jù)類型對比Fortran數(shù)據(jù)類型C數(shù)據(jù)類型INTEGER(1) charINTEGER(2)shortINTEGER(4)int(long)REAL(4)floatREAL(8)doubleFORTRAN和C數(shù)組比較C的第一個元素以0為索引,F(xiàn)ortran以1為索引多維數(shù)組,F(xiàn)ortran最左邊的索引變化最快(以列為主),C最右邊的索引變化最快(以行為主)對于一個定義為X23的數(shù)組:Fortran前四個元素為:(1,1),X(2,1),X(3,1),X(1,2)C為:X00,X01,X02,X10為保證元素順序的一致,C中一個定義為X23的數(shù)組, Fortran中應(yīng)聲明
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年群路密碼機(jī)系列合作協(xié)議書
- 人教版一年級語文下冊《吃水不忘挖井人》教學(xué)設(shè)計
- 2025年速凍丸類制品合作協(xié)議書
- 2025年個體診所合作協(xié)議(三篇)
- 2025年買賣別墅合同模板(三篇)
- 2025年產(chǎn)品區(qū)域代理合同協(xié)議常用版(2篇)
- 2025年產(chǎn)品設(shè)計合同(三篇)
- 2025年二年級教研組工作總結(jié)(2篇)
- 2025年個人幼兒園的課題總結(jié)范文(二篇)
- 2025年個人房屋防水施工合同模板(2篇)
- 城市隧道工程施工質(zhì)量驗收規(guī)范
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 五 100以內(nèi)的筆算加、減法2.筆算減法 第1課時 筆算減法課件2024-2025人教版一年級數(shù)學(xué)下冊
- 2025江蘇太倉水務(wù)集團(tuán)招聘18人高頻重點提升(共500題)附帶答案詳解
- 2024-2025學(xué)年人教新版高二(上)英語寒假作業(yè)(五)
- 2025年八省聯(lián)考陜西高考生物試卷真題答案詳解(精校打印)
- 2025脫貧攻堅工作計劃
- Q∕GDW 12118.3-2021 人工智能平臺架構(gòu)及技術(shù)要求 第3部分:樣本庫格式
- 客戶的分級管理培訓(xùn)(共60頁).ppt
- 廣東省義務(wù)教育階段學(xué)生轉(zhuǎn)學(xué)轉(zhuǎn)出申請表(樣本)
- 如何成為一個優(yōu)秀的生產(chǎn)經(jīng)理
評論
0/150
提交評論