[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第1頁
[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第2頁
[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第3頁
[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第4頁
[全國]PKPM入門培訓(xùn)一培訓(xùn)大綱(共38頁)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論