找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 582|回复: 9

[求助]:mdlcgi程序編譯出錯了!

[复制链接]
发表于 2005-8-16 15:54:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
各位大蝦,可否編譯過publisher 3.8提供的mdlcgi的例子levelcgi,我編譯不過,又沒有相關的說明文檔。

先謝過。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-24 19:07:49 | 显示全部楼层
我有個問題也要問一下:
我編寫一個MDL程式:可以將當前圖檔中的圖元掃描出來,但將該代移到mdlcgi時就掃描不到圖元,請哪個高手可以解釋是什麼原因?

代碼如下:
Private int checkDoor(void)
{
        //定義變量
        Scanlist scanList;                /*圖元集*/
        int status,scanWords;        /*狀態值*/
        MSElementDescr* pElmD;       
        ULong nextElm;
        Ulong currAddr[2];

        //掃描圖元
        mdlScan_initScanlist( & scanList);
        mdlScan_noRangeCheck( & scanList);

        //定義掃描參數
        scanList.scantype = ELEMTYPE | NESTCELL | ONEELEM;        /*設定掃描圖元類型,做為比較選項*/
        scanList.extendedType = FILEPOS;                                       
        scanList.typmask[0] = TMSK1_TEXT | TMSK0_TEXT_NODE ;
        scanList.sector = DGN_BLOCK(nextElm);
        scanList.offset = DGN_OFFSET(nextElm);
        mdlScan_initialize(0, & scanList);

        while (1)
        {
                scanWords = sizeof(currAddr) / sizeof(short);
                status = mdlScan_file(currAddr, & scanWords, sizeof(currAddr), & nextElm);
                //判斷圖元是否搜索完
                if (status != BUFF_FULL)
                {
                        msgPrint (MSGID_ScanEnd);
                        nextElm = 0;
                        break;
                }

                //取出一個圖元對象
                nextElm = mdlElmdscr_read( & pElmD, currAddr[0], 0, FALSE, & currAddr[0]);

                //尋找文字
                status = mdlElmdscr_operation(pElmD, seachTextElement, door, ELMD_ALL_ONCE);

                //釋放內存
                mdlElmdscr_freeAll( & pElmD);

                if (status)
                {
                        break;
                }//if
        }//while
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 21个

财富等级: 恭喜发财

发表于 2005-8-25 11:49:07 | 显示全部楼层
请问是什么错误?最好把错误信息贴上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-25 14:03:40 | 显示全部楼层
沒有錯誤訊息,只是在運行
status = mdlScan_file(currAddr, & scanWords, sizeof(currAddr), & nextElm);
返回為10,正確應該是11(因為我有參考外部圖檔)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-25 16:15:33 | 显示全部楼层
mdlScan_initialize(0, & scanList); 搜索参考文件第一个参数不能为0 这个是参考文件号
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-25 20:11:40 | 显示全部楼层
謝謝gp341,目前已可以掃描在參考圖檔啦!
並發現95與V8有很大的不同,我用V8采用的方法如下:
DgnModelRefP doorRefP;
mdlRefFile_attach(&doorRefP,roadName,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,1,1);
。。。
mdlScan_initialize(doorRefP, & scanList);
。。。
nextElm = mdlElmdscr_read( & pElmD, currAddr[0], doorRefP, FALSE, & currAddr[0]);
說明:在V8中mdlElmdscr_read的第三個參數也要指到參數的圖檔的文件號

還有一問題請教:
在Publisher打開DGN檔時,如果有中文字時會出現亂碼,請問要如何設置才可以正常顯示中文?

順便問一下關於C字符串的處理:
目標:有一個字符串:福建省.廈門市.開元區.禾祥西路.320.40.100.白鷺苑
其中每個欄位是以[.]隔開的,現在要根據這個字符串取出每四個[.]與第五個[.]間的字串(320),可如何實現?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-30 12:41:56 | 显示全部楼层
我這邊也有相同的問題:在Publisher打開DGN檔時,如果有中文字時會出現亂碼
不知哪位高手可以指點,謝謝!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-30 14:49:18 | 显示全部楼层
順便問一下關於C字符串的處理:
目標:有一個字符串:福建省.廈門市.開元區.禾祥西路.320.40.100.白鷺苑
其中每個欄位是以[.]隔開的,現在要根據這個字符串取出每四個[.]與第五個[.]間的字串(320),可如何實現?

可以使用strtok
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-30 23:28:45 | 显示全部楼层
謝謝:gp341  
我這邊覺得很奇怪,為什麼第一次使用strtok時必需傳入字符串,第二次後,只要傳NULL{strtok(NULL,".");}即可取得下一個字串?
還有,在Publisher打開DGN檔時,如果有中文字時會出現亂碼,是哪裡設置沒有設好?
還要有個問題
使用字串組時,首先必需創建字串組函數如下:
mdlStringList_create(100, 2);
其中第一參數表示該字串組的筆數100,第一個參數為字段數
請問:如何實現動態定義字串組的大小(定義時不知需要多少定串組)?
      第二參數必需字段數,例子中的字段數為2,應該有兩個欄位才是,為什麼結果只有一個欄位的資料?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-3 12:14:17 | 显示全部楼层
有個問題想請教:
在Publisher中mdlcgi函數,如下代碼:
// 修改請求keyin,調用套圖處理
// param: pPipeName => 響應管道名
Private void modifyRequestKeyins(char *pPipeName)
{
        //定義變量
    char    keyinMain[MAXFILELENGTH * 2];//命令內容
        char    keyinSetExtent[MAXFILELENGTH * 2];//範圍參數內容
        double        x, y , w, h;//範圍的起點及寬高
       
    // 要插入的內容
    sprintf (keyinMain, "MDL COMMAND BB01_Main %s", pPipeName);
        // 插入一個keyin,調用BB01_Main
    mdlcgi_insertKeyinBefore(KEYIN_PLOTCOMMAND, keyinMain);
       
        //設置區域範圍
        x = g_corValue[0];
        y = g_corValue[1];
        mdlString_toUors(&w, g_sParmValue[PARAM_AREA]);
        mdlString_toUors(&h, g_sParmValue[PARAM_AREA]);

        // 要插入的內容
        sprintf (keyinSetExtent, "setExtent %f,%f,%f,%f,1", x, y, w, h);

        // 插入一個keyin,設定輸出影響的範圍
        mdlcgi_insertKeyinBefore(KEYIN_PLOTTERSELECT, keyinSetExtent);

        // 插入一個keyin,unload本程式
        mdlcgi_insertKeyinBefore(KEYIN_PLOTENTITYCFG, "MDL UNLOAD BB01");
}

第一個mdlcgi_insertKeyinBefore是調用BB01_Main命令,這在該命令中有處理一些事件結果得到g_corValue[0]和g_corValue[1]的值(g_corValue是全局變量),在第二個mdlcgi_insertKeyinBefore之間有設置視窗範圍的設置:
        //設置區域範圍
        x = g_corValue[0];
        y = g_corValue[1];
        mdlString_toUors(&w, g_sParmValue[PARAM_AREA]);
        mdlString_toUors(&h, g_sParmValue[PARAM_AREA]);
但是出現取不到全局變量g_corValue的值,因為在取值之前它是已經執行mdlcgi_insertKeyinBefore(KEYIN_PLOTTERSELECT, keyinSetExtent)了,所以取出的值為0,請問要什麼處理,可以讓BB01_Main命令執行完,再執行mdlcgi_insertKeyinBefore(KEYIN_PLOTTERSELECT, keyinSetExtent)?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 15:01 , Processed in 0.483844 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表