找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1436|回复: 9

[分享]:土法:vc71 命令行 开发2004 初步

[复制链接]
发表于 2005-6-1 10:04:56 | 显示全部楼层 |阅读模式

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

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

×
听了老大们的建议。开始研究用vc71。欢迎大家指正


我实在不想装vc2003.

vc71好象有4个关键部分。
1. bin目录(要外加 mspdb71.dll, msvcp71.dll)
2.atlmfc;
3.include + lib
4.platformSDK.
把这几个作到dos set上。

改acedapi.lib 和rxapi.lib 中的mfc70.lib 到mfc71.lib(我实在是找不到mfc70.lib), 或用DLL to Lib 转mfc70.dll 得到mfc70.lib的静态库。
这样就能骗过arx了。


编译:肯定是在dos下,kukuku.

副作用。不能用mfc,放入cad2004报不能识别,点加载居然能用。hehehehe. 看来要上钩子了。如果有mfc70.lib + mfcs70.lib估计这条作废。

测试:除了不能用mfc外,其他DB功能OK.


附相关文件。
rem //////////设置cl路径;
path D:\vc7\Vc7\bin;d:\vc7\vc7\bin\z999999;D:\vc7\Common7\IDE;%PATH%

rem ////设置别的路径;
rem set EL1=D:\SDK\openDWG20\include;
rem set EL2=D:\SDK\openDWG20\lib;
rem set LL1=adv6Nt.lib

set EL1=D:\SDK\Dx81sdk\include;
set EL2=D:\SDK\Dx81sdk\lib;
set LL1=d3d8.lib d3dx8.lib

set include=F:\download\arx_sdk2004\inc;D:\vc7\Vc7\PlatformSDK\Include;D:\vc7\Vc7\atlmfc\include;D:\vc7\Vc7\include;d:\vc6\vc98\atl\include;d:\SDK\wtl70\include;d:\vc6\vc98\include;%EL1% %PATH%
set lib=F:\download\arx_sdk2004\lib;D:\vc7\Vc7\PlatformSDK\Lib;D:\vc7\Vc7\atlmfc\lib;D:\vc7\Vc7\lib;d:\vc6\vc98\lib;%EL2% %PATH%;

rem /////////[GX:能异常处理][Zi:能调试][LD:编译DLL][Fm:创造map][O1:小码] [MD:与 MSVCRT.LIB 链接,避免联接libcp.lib错误] /nodefaultlib:"msvcrt"
rem ////////释放编译 cl /GX ws2_32.lib atl.lib kernel32.lib user32.lib gdi32.lib winspool.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib Comdlg32.lib %1
rem ///////调试编译  

cl.exe /MD /LD   /EHsc acISMobj16.lib acge16.lib acdb16.lib   acedapi.lib rxapi.lib acad.lib    kernel32.lib gdi32.lib  uuid.lib Comdlg32.lib   %1 /link /def:del.def /out:del.arx





  1.   [FONT=courier new]

  2. #define WINVER 0x500

  3. ///#include "sizecbar.h"
  4. ///#include "scbarg.h"

  5. #define _WTL_USE_CSTRING
  6. #define _ATL_USE_CSTRING_FLOAT
  7. #include <atlbase.h>
  8. CComModule _Module;

  9. #include <atlapp.h>
  10. #include <atlmisc.h>

  11. #include <adscodes.h>
  12. #include <string.h>
  13. #include <aced.h>
  14. #include <dbents.h>
  15. #include <dbsymtb.h>
  16. #include <dbgroup.h>
  17. #include <dbapserv.h>

  18. #include <acdocman.h>

  19. #include <imgdef.h>  ////AcDbRasterImage;
  20. #include <imgent.h>

  21. #include <rxregsvc.h>

  22.   static AcDbDatabase* GetDB(){
  23.     return acdbHostApplicationServices()->workingDatabase();
  24.   }
  25.   static AcDbBlockTableRecord* GetModelSpaceRecord(AcDbDatabase* pDB, AcDb::OpenMode mode){
  26.     Acad::ErrorStatus err;
  27.     AcDbBlockTable *pTable;
  28.     AcDbBlockTableRecord * pRecord = NULL;
  29.       
  30.     err = pDB->getSymbolTable(pTable, AcDb::kForRead);
  31.     if(err == Acad::eOk){
  32.       err = pTable->getAt(ACDB_MODEL_SPACE, pRecord, mode);
  33.       if(err != Acad::eOk){
  34.         pRecord = NULL;
  35.       }
  36.       pTable->close();
  37.     }
  38.     return pRecord;
  39.   }  
  40.         static Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEntity){
  41.           Acad::ErrorStatus err = Acad::eNullHandle;
  42.                 AcDbBlockTableRecord* pRecord = GetModelSpaceRecord(GetDB(), AcDb::kForWrite);
  43.                 if(pRecord){
  44.                         err = pRecord->appendAcDbEntity(pEntity);
  45.                         if(err == Acad::eOk){
  46.                           pEntity->close();
  47.                         }
  48.                   pRecord->close();
  49.                 }
  50.                 return err;
  51.         }
  52.         //////////Image Process start =================

  53.   static BOOL RImg_CreateImgDef_(AcDbObjectId&        defID, const char* pImgPath, const char* pImgName){
  54.     BOOL isOK = FALSE;
  55.     Acad::ErrorStatus        err;
  56.     // Create new image def object
  57.     AcDbRasterImageDef* pImgDef = new AcDbRasterImageDef();
  58.     if(pImgDef){
  59.       err = pImgDef->setSourceFileName(pImgPath);
  60.       if(err == Acad::eOk){
  61.         err = pImgDef->load();
  62.         ////dict process;
  63.         if(err == Acad::eOk){
  64.           AcDbObjectId dictID = AcDbRasterImageDef::imageDictionary(GetDB());
  65.           if(dictID.asOldId() == 0){
  66.             AcDbRasterImageDef::createImageDictionary(GetDB(), dictID);
  67.           }
  68.           if(dictID.asOldId() != 0){
  69.             AcDbDictionary* pDict;
  70.             err = acdbOpenObject((AcDbObject*&)pDict, dictID, AcDb::kForWrite);
  71.             if(err == Acad::eOk){
  72.               if(!pDict->has(pImgName)){
  73.                 err = pDict->setAt(pImgName, pImgDef, defID);
  74.                 if(err == Acad::eOk){
  75.                   pImgDef->close();
  76.                   isOK = TRUE;
  77.                 }
  78.               }
  79.               pDict->close();
  80.             }
  81.           }
  82.         }
  83.       }
  84.       if(!isOK){
  85.         delete pImgDef;
  86.       }
  87.     }
  88.    
  89.     return isOK;
  90.   }
  91.   static BOOL RImg_CreateImg_(AcDbObjectId& entID, AcDbObjectId defID){
  92.     BOOL isOK = FALSE;
  93.     Acad::ErrorStatus        err;
  94.     AcDbRasterImage*        pImg = new AcDbRasterImage();
  95.    
  96.     if(pImg){
  97.       err = pImg->setImageDefId(defID);
  98.       if(err == Acad::eOk){
  99.         err = AddToModelSpace(pImg);      
  100.         if(err == Acad::eOk){
  101.           entID = pImg->objectId();
  102.           pImg->close();
  103.           isOK = TRUE;
  104.         }
  105.       }
  106.       if(!isOK){
  107.         delete pImg;
  108.       }
  109.     }
  110.     return isOK;
  111.   }
  112.   static BOOL RImg_GetImgWH_(const char* pFileName, float& w, float& h){
  113.     BOOL isOK = FALSE;
  114.     Acad::ErrorStatus err;

  115.     AcDbRasterImageDef* pImgDef = new AcDbRasterImageDef();
  116.     if(pImgDef){
  117.       err = pImgDef->setSourceFileName(pFileName);
  118.       if(err == Acad::eOk){
  119.         err = pImgDef->load();
  120.         if(err == Acad::eOk){
  121.           AcGeVector2d wh = pImgDef->size();
  122.           if(wh.x>0 && wh.y>0){
  123.             w = wh.x;
  124.             h = wh.y;
  125.             isOK = TRUE;
  126.           }
  127.           pImgDef->unload();
  128.         }
  129.       }
  130.       pImgDef->close();
  131.       delete pImgDef;
  132.     }
  133.    
  134.     return isOK;
  135.   }


  136.   static BOOL RImg_InsertImg_Gen_(const char* pFilePath, const char* pImgName, AcDbObjectId& imgID){

  137.     BOOL isOK = FALSE;
  138.     Acad::ErrorStatus err;

  139.                 float w; float h;
  140.                 float x = 0, y = 0;
  141.                 if(!RImg_GetImgWH_(pFilePath,  w, h))return FALSE;

  142.    
  143.     AcDbObjectId defID;   
  144.     if(RImg_CreateImgDef_(defID, pFilePath, pImgName)){
  145.       if(RImg_CreateImg_(imgID, defID)){
  146.         AcDbRasterImage* pImg;
  147.         err = acdbOpenObject((AcDbObject*&)pImg, imgID, AcDb::kForWrite);
  148.         if(err == Acad::eOk){
  149.          
  150.           AcGeVector3d u,v;
  151.           u.set(w, 0,0);
  152.           v.set(0, h, 0);
  153.           AcGePoint3d o(x, y, 0);

  154.           pImg->setOrientation(o, u, v);
  155.           ////pImg->setColorIndex(color);
  156.           pImg->close();
  157.           isOK = TRUE;
  158.         }
  159.       }
  160.     }  
  161.    
  162.     return isOK;
  163.   }
  164.         //////////Image Process end ===================


  165. static BOOL GetCADSelectRect(CRect& r){
  166.     BOOL isOK = FALSE;
  167.                 ///set doc focus;
  168.    
  169.     //从cad获得选择范围
  170.     ads_point p1,p2;
  171.     if(acedGetPoint(NULL, NULL, p1) == RTNORM){
  172.       if(acedGetCorner(p1, NULL, p2) == RTNORM){
  173.         long minX = __min(p1[0], p2[0]);
  174.         long minY = __min(p1[1], p2[1]);
  175.         long maxX = __max(p1[0], p2[0]);
  176.         long maxY = __max(p1[1], p2[1]);
  177.         ////acutPrintf("x1:%f y1:%f x2:%f y2:%f \r\n", p1[0],p1[1], p2[0],p2[1]);
  178.                                 ads_point t1, t2, t3, t4;
  179.                                 t1[0] = minX; t1[1] = minY; t1[2] = 0;
  180.                                 t2[0] = maxX; t2[1] = minY; t2[2] = 0;
  181.                                 t3[0] = maxX; t3[1] = maxY; t3[2] = 0;
  182.                                 t4[0] = minX; t4[1] = maxY; t4[2] = 0;
  183.                                 acedGrDraw(t1, t2, 1, 0);
  184.                                 acedGrDraw(t2, t3, 1, 0);
  185.                                 acedGrDraw(t3, t4, 1, 0);
  186.                                 acedGrDraw(t4, t1, 1, 0);

  187.         r = CRect(minX, minY, maxX, maxY);
  188.         isOK = TRUE;
  189.       }
  190.     }
  191.                 return isOK;
  192.   }

  193.         static void OnlyLockDoc(){
  194.           acDocManager->lockDocument(acDocManager->curDocument());               
  195.   }
  196.   static void OnlyUnlockDoc(){
  197.           acDocManager->unlockDocument(acDocManager->curDocument());
  198.   }
  199.   static AcDbBlockTableRecord* test1(AcDbDatabase* pDB){
  200.     Acad::ErrorStatus err;
  201.     AcDbBlockTable *pTable;
  202.     AcDbBlockTableRecord * pRecord = NULL;
  203.       
  204.     err = pDB->getSymbolTable(pTable, AcDb::kForRead);
  205.     if(err == Acad::eOk){
  206.       err = pTable->getAt(ACDB_MODEL_SPACE, pRecord, AcDb::kForWrite);
  207.       if(err == Acad::eOk){
  208.                                 AcGePoint3d p1(0,0,0);
  209.                                 AcGePoint3d p2(100,100,0);
  210.                                 AcDbLine* pLine = new AcDbLine(p1, p2);
  211.                                 err = pRecord->appendAcDbEntity(pLine);
  212.                                 acutPrintf("err:%i, ok:%i\r\n", err, Acad::eOk);
  213.                                 pLine->close();

  214.         
  215.       }
  216.       pTable->close();
  217.     }
  218.     return pRecord;
  219.   }

  220. void initApp(){
  221.         acrxLoadModule("acismui.arx", 1);
  222.         acutPrintf("gggggggggg\r\n");
  223.         OnlyLockDoc();
  224.         AcDbBlockTableRecord* pRecord = test1(GetDB());
  225.         if(pRecord){
  226.                 acutPrintf("pRecord:%i\r\n", pRecord);
  227.                 pRecord->close();
  228.         }

  229.         AcDbObjectId id;
  230.   RImg_InsertImg_Gen_("d:\\3.jpg", "ssss", id);


  231.         OnlyUnlockDoc();
  232.         acutPrintf("ssssssssssssss\r\n");

  233.   CRect r;
  234.         GetCADSelectRect(r);
  235.         acutPrintf("%i, %i, %i, %i\r\n", r.left, r.top, r.right, r.bottom);
  236. }

  237. void unloadApp(){        
  238. }

  239. AcRx::AppRetCode
  240. acrxEntryPoint(AcRx::AppMsgCode msg, void* appId){
  241.         switch (msg) {
  242.         case AcRx::kInitAppMsg:
  243.                        acrxDynamicLinker->unlockApplication(appId);
  244.                                 acrxDynamicLinker->registerAppMDIAware(appId);

  245.                 initApp();
  246.                 break;
  247.         case AcRx::kUnloadAppMsg:
  248.                 unloadApp();
  249.         }
  250.         return AcRx::kRetOK;
  251. }

  252.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-2 09:23:17 | 显示全部楼层
不错哈,感谢作者拿来分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2006-4-18 11:51:22 | 显示全部楼层
高手呀,有没有QQ呀,想和您交交朋友!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-27 15:31:33 | 显示全部楼层
记得加入acISMobj15.dbx:)
不然会有eWrongObjectType的问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-9-13 20:25:43 | 显示全部楼层
论坛显示代码有问题, #include 后的头文件不能正常显示。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 12:46 , Processed in 0.219368 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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