标准公差/基本偏差查询

标准公差/基本偏差查询

从机械CAD论坛上下载,方便没有账号的朋友

下载:http://pan.baidu.com/share/link?shareid=905093776&uk=721859502

发表在 CAD实用软件 | 标签为 , | 留下评论

液压元件库

液压元件库

从机械CAD论坛中下载,方便没有注册账号的用户使用

下载:http://pan.baidu.com/share/link?shareid=869563540&uk=721859502

发表在 CAD技巧 | 标签为 | 留下评论

WordPress首页显示分类和文章列表

<?php
//获得全部
$scat = get_categories(‘hide_empty=0’);
foreach ($scat as $mx_cat)
{
echo $mx_cat->cat_name.”<br>”;
$recentPosts = new WP_Query();
// showposts=20,表示最多显示20篇文章,应该要按时间倒序排列,不过还没有来得及做
$query_str=”cat=”.$mx_cat->cat_ID.”&showposts=20″;
$recentPosts->query($query_str);
while ($recentPosts->have_posts()) : $recentPosts->the_post();
echo ‘<a href=”‘;
echo the_permalink();
echo ‘”>’;
echo $post->post_title;
echo ‘</a><br>’;
endwhile;
echo ‘<a href=”‘;
echo get_category_link($mx_cat->cat_ID);
echo ‘”>’;
echo ‘查看分类 “‘.$mx_cat->cat_name.'” 全部文章…’;
echo ‘</a><br>’;
}
?>

 

将上述代码放在首页模板(index.php)的合适位置

将显示文章的代码:get_template_part( ‘loop’, ‘index’ );或其它的显示文章的代码删除掉就可以了

这样的效果非常利于百度的SEO优化,特别是新站,首页内链大大增加。

发表在 网站建设 | 标签为 , , , | 2条评论

AutoCAD小游戏 俄罗斯方块

AutoCAD 小游戏

俄罗斯方块

用LISP语言编写,可以在任何CAD版本中运行

不过按键不是很方便。

 ELSFK

发表在 CAD实用软件 | 2条评论

autocad2006+64位win7

我编制了一个64位win7下打开不重复打开CAD2006的小程序。使用方法就是把*.dwg的打开方式改为我编的”CAD2006for64bitwin7.exe”就ok了。欢迎大家使用,主要用于64位系统又需要安装intecad的用友使用;不用天喻的朋友可装64位的高版本CAD。

CAD2006for64bitwin7

发表在 CAD实用软件 | 留下评论

机械工程师2010最新破解版

下载地址:http://pan.baidu.com/share/link?shareid=1288575966&uk=721859502

1.默认插入光盘会自动运行,如果没有自动运行安装程序,请手动运行autorun.exe或Setup.exe,然后一直下一步下一步即可,直到安装完成,不需要安装加密狗驱动……..
2.安装完成后,复制破解文件下的所有文件到安装目录support文件夹下,覆盖原文件即可……..
3.破解完成

发表在 CAD实用软件 | 留下评论

把URL转换成绝对地址

//
// ../表示向上一层
// ./表示同级目录下
// /表示根目录下的
// XX.htm表示当前目录下的
//把URL转换成绝对地址
//sURL,源地址
//str_fafURL,相对地址
//返回:绝对地址
CString OnConversionURL(CString sURL,CString str_fafURL)
{

 if(sURL.Find(_T(“/”),8)<0)
 {
  sURL +=_T(“/”);
 }
 CString str_activeURL;
 int int_j = 0;
 int i=0;
 str_activeURL = str_fafURL;
 if(str_fafURL.Find(_T(“../”),0)!=-1&&str_fafURL[0]!=’/’)
 {
  while( i<=str_fafURL.GetLength() )
  {
   if( str_fafURL[i] == ‘.’ && str_fafURL[i+1] == ‘.’ && str_fafURL[i+2] == ‘/’ )
   {
    int_j++;
   }
   i++;
  }
  //int_j,../的首位置
  if(str_fafURL[0]==’/’)
  {
   str_fafURL.Delete(0,1);
  }
  str_fafURL.Replace(_T(“../”),_T(“”));
  //设置为同级目录下没有意义
  str_fafURL.Replace(_T(“./”),_T(“”));
  i=0;
  int int_i=0;
  while( i <= sURL.GetLength() )
  {
   if( sURL[i]==’/’ )
   {
    int_i++;
   }
   i++;
  }
  int_i -= int_j;

  if( int_i<3 )
  {
   int_i = 3;
  }

  int int_cour=0;
  for( i=0; i<=sURL.GetLength(); i++)
  {
   if( sURL[i]==’/’ )
   {
    int_cour++;
   }
   if( int_cour==int_i )
   {   
    sURL= sURL.Left(i+1);
    break;
   }
  }
  //容错处理
  if( sURL[sURL.GetLength()-1]!=’/’ )
  { 
   sURL +=”/”;
  }
  sURL += str_fafURL;
  return sURL;
 }
 else if(str_fafURL.Find(_T(“./”),0)!=-1&&str_fafURL[0]!=’/’)
 {
  while( i<=str_fafURL.GetLength() )
  {
   if( str_fafURL[i] == ‘.’ && str_fafURL[i+1] == ‘/’)
   {
    int_j++;
   }
   i++;
  }
  if(str_fafURL[0]==’/’)
  {
   str_fafURL.Delete(0,1);
  }
  str_fafURL.Replace(_T(“./”),_T(“”));
  i=0;
  int int_i=0;
  while( i <= sURL.GetLength() )
  {
   if( sURL[i]==’/’ )
   {
    int_i++;
   }
   i++;
  }
  //int_i -= int_j;

  if( int_i<3 )
  {
   int_i = 3;
  }
  int int_cour=0;
  for( i=0; i<=sURL.GetLength(); i++)
  {
   if( sURL[i]==’/’ )
   {
    int_cour++;
   }
   if( int_cour==int_i+1 )
   {   
    sURL= sURL.Left(i+1);
    break;
   }
  }
  //容错处理
  if( sURL[sURL.GetLength()-1]!=’/’ )
  { 
   sURL +=”/”;
  }
  sURL += str_fafURL;
  return sURL;
 }
 else
 {
  if( str_fafURL[0] ==’/’ )
  {
   int int_b = 0 ;
   for( int a=0; int_b<3 && a<sURL.GetLength(); a++)
   {
    if( sURL[a]==’/’ )
    {
     int_b++;
    }
    if( int_b==3 )
    {
     sURL = sURL.Left(a);
     break;
    }
   }
   sURL += str_fafURL;
  }
  else
  {
   for( int i=sURL.GetLength() ; i> 0 ; i– )
   {
    if( sURL[i] ==’/’ )
    {
     sURL = sURL.Left( i+1 );
     break;
    }
   }
   sURL += str_fafURL;
  }
  return sURL;
 }
}

发表在 C++ | 标签为 , , | 留下评论

GetActiveObject 获取多个实例

示例代码获取多个AutoCAD的IAcadApplication实例,只要修改Guid,就可以获取其它类型实例

[DllImport(“ole32.dll”, EntryPoint = “CreateBindCtx”)]
        public static extern int CreateBindCtx_(int reserved, out IBindCtx ppbc);
        /// <summary>
        /// 枚举当前所有活动的CAD进程(暂时只能枚举AutoCAD2008的,后续再增加)
        /// </summary>
        /// <param name=”apps”></param>
        public void ListAllCADApplication(List<IAcadApplication> apps)
        {
            IBindCtx pbc = null;
            CreateBindCtx_(0, out pbc);
            IRunningObjectTable pprot = null;
            pbc.GetRunningObjectTable(out pprot);
            IEnumMoniker ppenumMoniker = null;
            pprot.EnumRunning(out ppenumMoniker);
            ppenumMoniker.Reset();
            IMoniker[] rgelt = new IMoniker[1];
            rgelt[0] = null;
            int rc = 0;
            rc = ppenumMoniker.Next(1, rgelt, IntPtr.Zero);
            while (rgelt[0] != null)
            {
                string ppszDisplayName;
                rgelt[0].GetDisplayName(pbc, null, out ppszDisplayName);
                //可以在注册表中”HKEY_LOCAL_MACHINE\SOFTWARE\Classes”下面找到对应的GUID
                if (string.Compare(ppszDisplayName, “!{6AB55F46-2523-4701-A912-B226F46252BA}”, true) == 0)
                {
                    //是AutoCAD2008进程
                    object obj = null;
                    pprot.GetObject(rgelt[0], out obj);
                    if (obj == null)
                    {
                        continue;
                    }
                    IAcadApplication app = (IAcadApplication)obj;
                    if (app == null)
                    {
                        continue;
                    }
                    apps.Add(app);

                }
                rgelt[0] = null;
                rc = ppenumMoniker.Next(1, rgelt, IntPtr.Zero);
            }

        }

发表在 C# | 标签为 , | 留下评论

CAD application下loadctrls键值对应意义

注册表键值”LoADCTRLS”控制说明,控制ARX程序的加载方式(上例中使用的是Ox02随CAD启动一起加载)

0x01:Load the application upon detection of proxy object.
   当代理对像被控知时另载相应ARX程序.

0x02:Load the application upon AutoCAD startup.
   当AutoCAD启动时加载相应ARX程序.

0x04:Load the application upon invocation of a command.
   当输入命令时加载相应ARX程序.

0x08:Load the application upon request by the user or another application.
   当有用户或别的程序请求时加载相应ARX程序.

0x10:Do not load the application.
   从不加载该应用程序.

0x20:Load the application transparently.
   显式加载该应该程序.(不知该项译法是否”

发表在 ObjectArx | 留下评论

AcDbDwgFiler继承实现

代码下载:GDwgFiler

#pragma once
#include “dbfiler.h”
enum DwgFilerDataType
{
kDataString=0,
kDataBChunk=1,
kDataHandle=2,
kDataInt32=3,
kDataInt16=4,
kDataInt8=5,
kDataUInt32=6,
kDataUInt16=7,
kDataUInt8=8,
kDataBoolean=9,
kDataBool=10,
kDataDouble=11,
kDataPoint2d=12,
kDataPoint3d=13,
kDataVector2d=14,
kDataVector3d=15,
kDataScale3d=16,
kDataBytes=17,
kDataAddress=18,
kDataHardOwnershipId=19,
kDataSoftOwnershipId=20,
kDataHardPointerId=21,
kDataSoftPointerId=22,
kDataLong=23,
kDataInt64=24,
kDataUInt64=25

};
class GDwgFiler:public AcDbDwgFiler
{
public:
ACRX_DECLARE_MEMBERS(GDwgFiler);

GDwgFiler();
virtual ~GDwgFiler();

virtual Acad::ErrorStatus filerStatus() const{return m_stat;}
virtual AcDb::FilerType filerType() const{return m_filerType;}
virtual void setFilerStatus(Acad::ErrorStatus es){m_stat=es;}
virtual void resetFilerStatus(){m_stat=Acad::eOk;}

virtual Acad::ErrorStatus readHardOwnershipId(AcDbHardOwnershipId*);
virtual Acad::ErrorStatus writeHardOwnershipId(const AcDbHardOwnershipId&);

virtual Acad::ErrorStatus readSoftOwnershipId(AcDbSoftOwnershipId*);
virtual Acad::ErrorStatus writeSoftOwnershipId(const AcDbSoftOwnershipId&);

virtual Acad::ErrorStatus readHardPointerId(AcDbHardPointerId*);
virtual Acad::ErrorStatus writeHardPointerId(const AcDbHardPointerId&);

virtual Acad::ErrorStatus readSoftPointerId(AcDbSoftPointerId*);
virtual Acad::ErrorStatus writeSoftPointerId(const AcDbSoftPointerId&);

virtual Acad::ErrorStatus readString(ACHAR **);
virtual Acad::ErrorStatus writeString(const ACHAR *);
#if _MSC_VER>=1400

virtual Acad::ErrorStatus readString(AcString &);
virtual Acad::ErrorStatus writeString(const AcString &);
#endif

virtual Acad::ErrorStatus readBChunk(ads_binary*);
virtual Acad::ErrorStatus writeBChunk(const ads_binary&);

virtual Acad::ErrorStatus readAcDbHandle(AcDbHandle*);
virtual Acad::ErrorStatus writeAcDbHandle(const AcDbHandle&);

#if _MSC_VER>=1500

virtual Acad::ErrorStatus readInt64(Adesk::Int64*);
virtual Acad::ErrorStatus writeInt64(Adesk::Int64);
virtual Acad::ErrorStatus readUInt64(Adesk::UInt64*);
virtual Acad::ErrorStatus writeUInt64(Adesk::UInt64);
#endif

virtual Acad::ErrorStatus readInt32(Adesk::Int32*);
virtual Acad::ErrorStatus writeInt32(Adesk::Int32);

virtual Acad::ErrorStatus readInt16(Adesk::Int16*);
virtual Acad::ErrorStatus writeInt16(Adesk::Int16);

virtual Acad::ErrorStatus readInt8(Adesk::Int8 *);
virtual Acad::ErrorStatus writeInt8(Adesk::Int8);
#if _MSC_VER<=1300
virtual Acad::ErrorStatus readChar(char* unnamed){return readInt8(unnamed);}
virtual Acad::ErrorStatus writeChar(char unnamed){return writeInt8(unnamed);}
#endif

virtual Acad::ErrorStatus readUInt32(Adesk::UInt32*);
virtual Acad::ErrorStatus writeUInt32(Adesk::UInt32);

virtual Acad::ErrorStatus readUInt16(Adesk::UInt16*);
virtual Acad::ErrorStatus writeUInt16(Adesk::UInt16);

virtual Acad::ErrorStatus readUInt8(Adesk::UInt8*);
virtual Acad::ErrorStatus writeUInt8(Adesk::UInt8);

virtual Acad::ErrorStatus readBoolean(Adesk::Boolean*);
virtual Acad::ErrorStatus writeBoolean(Adesk::Boolean);

virtual Acad::ErrorStatus readBool(bool*);
virtual Acad::ErrorStatus writeBool(bool);

virtual Acad::ErrorStatus readDouble(double*);
virtual Acad::ErrorStatus writeDouble(double);
Acad::ErrorStatus readLong(long*);
Acad::ErrorStatus writeLong(long);

virtual Acad::ErrorStatus readPoint2d(AcGePoint2d*);
virtual Acad::ErrorStatus writePoint2d(const AcGePoint2d&);

virtual Acad::ErrorStatus readPoint3d(AcGePoint3d*);
virtual Acad::ErrorStatus writePoint3d(const AcGePoint3d&);

virtual Acad::ErrorStatus readVector2d(AcGeVector2d*);
virtual Acad::ErrorStatus writeVector2d(const AcGeVector2d&);

virtual Acad::ErrorStatus readVector3d(AcGeVector3d*);
virtual Acad::ErrorStatus writeVector3d(const AcGeVector3d&);

virtual Acad::ErrorStatus readScale3d(AcGeScale3d*);
virtual Acad::ErrorStatus writeScale3d(const AcGeScale3d&);
#if _MSC_VER<1500

virtual Acad::ErrorStatus readBytes(void*, Adesk::UInt32);
virtual Acad::ErrorStatus writeBytes(const void*, Adesk::UInt32);
#else
virtual Acad::ErrorStatus readBytes(void *, Adesk::UIntPtr);
virtual Acad::ErrorStatus writeBytes(const void *, Adesk::UIntPtr);
#endif

virtual Acad::ErrorStatus readAddress(void**);
virtual Acad::ErrorStatus writeAddress(const void*);

#if _MSC_VER<1500
virtual Acad::ErrorStatus seek(long offset, int method){return Acad::eNotImplementedYet;}
#else
virtual Acad::ErrorStatus seek(Adesk::Int64 nOffset, int method){return Acad::eNotImplementedYet;}
#endif
#if _MSC_VER<1500
virtual long tell() const{return 0;}
#else
virtual Adesk::Int64 tell() const{return 0;}
#endif

void setFilerType(AcDb::FilerType newType) { m_filerType = newType; }
static Adesk::UInt32 kCurrentVersionNumber ;

const AcDbDatabase* database() const{return m_db;}
void setDatabase(AcDbDatabase* pDb){m_db=pDb;}
void getDat(AcArray<byte>& dat);
void setDat(AcArray<byte>& dat);
public:
bool m_bOpenLog;//是否打开日志,默认为否

 

private:
void WriteLine(CString fmt, …);
Acad::ErrorStatus m_stat;
AcDbDatabase* m_db;//位于哪个数据库中,主要用于读取ObjectId类
AcDb::FilerType m_filerType;
AcArray<byte> m_dat;//数据
int m_readindex;
int m_writeindex;
#if _MSC_VER>=1400
AcString m_tmpStr;
#endif
Adesk::UInt32 m_version ;
Acad::ErrorStatus FirstReadVersion();
Acad::ErrorStatus FirstWriteVersion();
virtual Acad::ErrorStatus _readInt32(Adesk::Int32*);
virtual Acad::ErrorStatus _readInt16(Adesk::Int16*);
virtual Acad::ErrorStatus _readInt8(Adesk::Int8*);
virtual Acad::ErrorStatus _readUInt32(Adesk::UInt32*);
virtual Acad::ErrorStatus _readUInt16(Adesk::UInt16*);
virtual Acad::ErrorStatus _readUInt8(Adesk::UInt8*);
virtual Acad::ErrorStatus _readType(DwgFilerDataType* pType);
virtual Acad::ErrorStatus _readDouble(double*);
virtual Acad::ErrorStatus _readBoolean(Adesk::Boolean*);
virtual Acad::ErrorStatus _readBool(bool*);
virtual Acad::ErrorStatus _readLong(long*);

virtual Acad::ErrorStatus _writeUInt32(Adesk::UInt32);
virtual Acad::ErrorStatus _writeUInt16(Adesk::UInt16);
virtual Acad::ErrorStatus _writeUInt8(Adesk::UInt8);
virtual Acad::ErrorStatus _writeInt32(Adesk::Int32);
virtual Acad::ErrorStatus _writeInt16(Adesk::Int16);
virtual Acad::ErrorStatus _writeInt8(Adesk::Int8);
virtual Acad::ErrorStatus _writeType(DwgFilerDataType kType);
virtual Acad::ErrorStatus _writeDouble(double);
virtual Acad::ErrorStatus _writeBoolean(Adesk::Boolean);
virtual Acad::ErrorStatus _writeBool(bool);
virtual Acad::ErrorStatus _writeString(const ACHAR *);
virtual Acad::ErrorStatus _writeLong(const long);
#if _MSC_VER>=1500

virtual Acad::ErrorStatus _readInt64(Adesk::Int64*);
virtual Acad::ErrorStatus _writeInt64(Adesk::Int64);
virtual Acad::ErrorStatus _readUInt64(Adesk::UInt64*);
virtual Acad::ErrorStatus _writeUInt64(Adesk::UInt64);
#endif
//恢复到读取类型之前
virtual Acad::ErrorStatus _backToBeforeReadType();

};

发表在 ObjectArx | 留下评论

将二维多段线转换为多段线

//设置为相同的属性
//将pTargetEnt设置为和pSourceEnt设置为一样的属性
void SameEntityAttr(AcDbEntity* pTargetEnt,AcDbEntity* pSourceEnt)
{
pTargetEnt->setColor(pSourceEnt->color());
pTargetEnt->setLayer(pSourceEnt->layer());
pTargetEnt->setLinetype(pSourceEnt->linetype());
pTargetEnt->setLineWeight(pSourceEnt->lineWeight());
#if _MSC_VER>=1400
pTargetEnt->setMaterial(pSourceEnt->materialId());
#endif
}
AcDbPolyline* Poly2dToPline(AcDb2dPolyline* pPolyline2d)
{
AcDbObjectIterator *pObjIter = pPolyline2d->vertexIterator();
if(pObjIter == NULL)
return NULL;
AcDbPolyline* pLine=new AcDbPolyline();
pLine->setDatabaseDefaults(pPolyline2d->database());
SameEntityAttr(pLine,pPolyline2d);
AcDb::Poly2dType PolyType = pPolyline2d->polyType();
AcDb2dVertex *pVertex;
unsigned int index=0;
//遍历点,并读取其凸度
for(pObjIter->start();!pObjIter->done();pObjIter->step())
{
if(pObjIter->entity()) return 0;

if(acdbOpenObject(pVertex,pObjIter->objectId(),AcDb::kForRead) != Acad::eOk) return 0;

if(PolyType == AcDb::k2dSimplePoly)
{
if(pVertex->vertexType() != AcDb::k2dVertex)
{
pVertex->close();
continue;
}
}
else if((PolyType == AcDb::k2dCubicSplinePoly) ||
(PolyType == AcDb::k2dQuadSplinePoly))
{
if(pVertex->vertexType() != AcDb::k2dSplineCtlVertex)
{
pVertex->close();
continue;
}
}
else if(PolyType == AcDb::k2dFitCurvePoly)
{

}
AcGePoint2d pt(pVertex->position().x,pVertex->position().y);
pLine->addVertexAt(index,pt,pVertex->bulge(),pVertex->startWidth(),pVertex->endWidth());
index++;
pVertex->close();
}
return pLine;
}

发表在 ObjectArx | 留下评论

设置两个填充颜色相同

void SameHatchColor(AcDbHatch* pTargetHatch,AcDbHatch* pSourceHatch)
{
//填充
Adesk::Boolean GradientOneColorMode;
AcDbHatch::HatchObjectType hatchObjectType;
AcArray<AcCmColor> GradientColors;
AcArray<float> GradientValues;
GradientOneColorMode=pSourceHatch->getGradientOneColorMode();
hatchObjectType=pSourceHatch->hatchObjectType();
unsigned int count=0;
AcCmColor* colors=NULL;
float* values=NULL;
GradientColors.setLogicalLength(0);
GradientValues.setLogicalLength(0);
Acad::ErrorStatus es=pSourceHatch->getGradientColors(count,colors,values);
if(es==eOk&&count>0)
{
for(int i=0;i<count;i++)
{
GradientColors.append(colors[i].colorIndex());
GradientValues.append(values[i]);
}
}
pTargetHatch->setGradientOneColorMode(GradientOneColorMode);
pTargetHatch->setHatchObjectType(hatchObjectType);
hatchObjectType=pTargetHatch->hatchObjectType();
if(!GradientOneColorMode)
{
unsigned int count=GradientColors.logicalLength();
AcCmColor* new_colors=new AcCmColor[count];
float* new_values=new float[count];
for(unsigned int i=0;i<count;i++)
{
new_colors[i]=GradientColors.at(i);
new_values[i]=GradientValues.at(i);
}
pTargetHatch->setGradientColors(count,new_colors,new_values);
#ifdef _WIN64
delete new_colors;
delete new_values;
#else
delete[] new_colors;
delete[] new_values;
#endif
}

}

发表在 ObjectArx | 留下评论

宽字节转换为单字节

//使用过后必须释放
char* ConvertToLPCSTR(CString swString)
{
#ifdef _UNICODE
char* szBuf = NULL;
UINT nLen = NULL;

nLen = WideCharToMultiByte(CP_ACP, 0, swString/*wszString*/, -1, NULL, 0, NULL, NULL);

szBuf = (char*)malloc(nLen + 1);

int nRet = WideCharToMultiByte(CP_ACP, 0, swString, -1, szBuf, nLen, NULL, NULL);

if (0 == nRet)
{
free(szBuf);
szBuf = NULL;
}
return szBuf;
#else
char* szBuf = NULL;
int nLen=swString.GetLength()+1;
szBuf = (char*)malloc(nLen + 1);
strcpy(szBuf,swString);
return szBuf;
#endif
}

注意:使用过后必须使用free释放

发表在 C++ | 留下评论

eLockViolation错误是怎么回事

对话框中操作实体要先acDocManager->lockDocument(curDoc(),AcAp::kWrite);
这样再打开就不会eLockiolation了

注意结束后记得unlockDocument

发表在 ObjectArx | 标签为 | 留下评论

acadErrorStatusTextChs

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
//当前版本:V1.0.0
//发布日期:20130819
//鉴于作者英语水平有限,部分翻译可能不准确,欢迎批量指正
//QQ:245804736,EMail:wdzhangsl@126.com
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
#include “StdAfx.h”
TCHAR Glb_AcadErrorInfo[2048+1]={0};
/*用s2串替换s中的s1串*/
void replace(TCHAR *s,TCHAR *s1,TCHAR *s2)
{
int nLen=lstrlen(s);
int nLen1=lstrlen(s1);
int nLen2=lstrlen(s2);
for(int i=0;i<nLen-nLen1+1;i++)
{
bool bSame=true;
for(int j=0;j<nLen1;j++)
{
if(s[i+j]!=s1[j])
{
bSame=false;
break;
}
}
if(!bSame)
{
continue;
}

//i+nLen1是原来的字符串的后面部分开始
if(nLen1>nLen2)
{
//替换后字符串变短nLen1-nLen2
for(int k=0;k<nLen2;k++)
{
s[i+k]=s2[k];
}

for(int l=i+nLen2;l<nLen+nLen2-nLen1;l++)
{
s[l]=s[l+nLen1-nLen2];
}
for(int m=nLen+nLen2-nLen1;m<nLen;m++)
{
s[m]=’\0′;
}
nLen=lstrlen(s);
i=i+nLen2;
}
else if(nLen2>nLen1)
{
//替换后字符串变长了nLen2-nLen1
//先将替换时占用到的位置整体后移
for(int l=nLen+nLen2-nLen1;l>=i+nLen2;l–)
{
s[l]=s[l+nLen1-nLen2];
}
for(int k=0;k<nLen2;k++)
{
s[i+k]=s2[k];
}
nLen=lstrlen(s);
i=i+nLen2;
}

 

}
}
//中文版输出错误
const TCHAR * acadErrorStatusTextChs(Acad::ErrorStatus es)
{
switch(es)
{
case Acad::eOk:lstrcpy(Glb_AcadErrorInfo,_T(“正确”));break;
case Acad::eNotImplementedYet:lstrcpy(Glb_AcadErrorInfo,_T(“尚未实现”));break;
case Acad::eNotApplicable:lstrcpy(Glb_AcadErrorInfo,_T(“不合适的”));break;
case Acad::eInvalidInput:lstrcpy(Glb_AcadErrorInfo,_T(“无效的输入”));break;
case Acad::eAmbiguousInput:lstrcpy(Glb_AcadErrorInfo,_T(“模糊不清的输入”));break;
case Acad::eAmbiguousOutput:lstrcpy(Glb_AcadErrorInfo,_T(“模糊不清的输出”));break;
case Acad::eOutOfMemory:lstrcpy(Glb_AcadErrorInfo,_T(“内存不足”));break;
case Acad::eBufferTooSmall:lstrcpy(Glb_AcadErrorInfo,_T(“缓冲区太小”));break;
case Acad::eInvalidOpenState:lstrcpy(Glb_AcadErrorInfo,_T(“无效的打开状态”));break;
case Acad::eEntityInInactiveLayout:lstrcpy(Glb_AcadErrorInfo,_T(“实体不在活动布局上”));break;
case Acad::eHandleExists:lstrcpy(Glb_AcadErrorInfo,_T(“句柄已存在”));break;
case Acad::eNullHandle:lstrcpy(Glb_AcadErrorInfo,_T(“空句柄”));break;
case Acad::eBrokenHandle:lstrcpy(Glb_AcadErrorInfo,_T(“损坏的句柄”));break;
case Acad::eUnknownHandle:lstrcpy(Glb_AcadErrorInfo,_T(“未知句柄”));break;
case Acad::eHandleInUse:lstrcpy(Glb_AcadErrorInfo,_T(“句柄被占用”));break;
case Acad::eNullObjectPointer:lstrcpy(Glb_AcadErrorInfo,_T(“对象指针为空”));break;
case Acad::eNullObjectId:lstrcpy(Glb_AcadErrorInfo,_T(“对象ID为空”));break;
case Acad::eNullBlockName:lstrcpy(Glb_AcadErrorInfo,_T(“块名称为空”));break;
case Acad::eContainerNotEmpty:lstrcpy(Glb_AcadErrorInfo,_T(“容器不为空”));break;
case Acad::eNullEntityPointer:lstrcpy(Glb_AcadErrorInfo,_T(“实体指针为空”));break;
case Acad::eIllegalEntityType:lstrcpy(Glb_AcadErrorInfo,_T(“非法的实体类型”));break;
case Acad::eKeyNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“关键字未找到”));break;
case Acad::eDuplicateKey:lstrcpy(Glb_AcadErrorInfo,_T(“重复的关键字”));break;
case Acad::eInvalidIndex:lstrcpy(Glb_AcadErrorInfo,_T(“无效的索引”));break;
case Acad::eDuplicateIndex:lstrcpy(Glb_AcadErrorInfo,_T(“重复的索引”));break;
case Acad::eAlreadyInDb:lstrcpy(Glb_AcadErrorInfo,_T(“已经在数据库中了”));break;
case Acad::eOutOfDisk:lstrcpy(Glb_AcadErrorInfo,_T(“硬盘容量不足”));break;
case Acad::eDeletedEntry:lstrcpy(Glb_AcadErrorInfo,_T(“已经删除的函数入口”));break;
case Acad::eNegativeValueNotAllowed:lstrcpy(Glb_AcadErrorInfo,_T(“不允许输入负数”));break;
case Acad::eInvalidExtents:lstrcpy(Glb_AcadErrorInfo,_T(“无效的空间范围”));break;
case Acad::eInvalidAdsName:lstrcpy(Glb_AcadErrorInfo,_T(“无效的ADS名称”));break;
case Acad::eInvalidSymbolTableName:lstrcpy(Glb_AcadErrorInfo,_T(“无效的符号名称”));break;
case Acad::eInvalidKey:lstrcpy(Glb_AcadErrorInfo,_T(“无效的关键字”));break;
case Acad::eWrongObjectType:lstrcpy(Glb_AcadErrorInfo,_T(“错误的类型”));break;
case Acad::eWrongDatabase:lstrcpy(Glb_AcadErrorInfo,_T(“错误的数据库”));break;
case Acad::eObjectToBeDeleted:lstrcpy(Glb_AcadErrorInfo,_T(“对象即将被删除”));break;
case Acad::eInvalidDwgVersion:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的DWG版本”));break;
case Acad::eAnonymousEntry:lstrcpy(Glb_AcadErrorInfo,_T(“多重入口”));break;
case Acad::eIllegalReplacement:lstrcpy(Glb_AcadErrorInfo,_T(“非法的替代者”));break;
case Acad::eEndOfObject:lstrcpy(Glb_AcadErrorInfo,_T(“对象结束”));break;
case Acad::eEndOfFile:lstrcpy(Glb_AcadErrorInfo,_T(“文件结束”));break;
case Acad::eIsReading:lstrcpy(Glb_AcadErrorInfo,_T(“正在读取”));break;
case Acad::eIsWriting:lstrcpy(Glb_AcadErrorInfo,_T(“正在写入”));break;
case Acad::eNotOpenForRead:lstrcpy(Glb_AcadErrorInfo,_T(“不是只读打开”));break;
case Acad::eNotOpenForWrite:lstrcpy(Glb_AcadErrorInfo,_T(“不是可写打开”));break;
case Acad::eNotThatKindOfClass:lstrcpy(Glb_AcadErrorInfo,_T(“类型不匹配”));break;
case Acad::eInvalidBlockName:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的块名称”));break;
case Acad::eMissingDxfField:lstrcpy(Glb_AcadErrorInfo,_T(“DXF字段缺失”));break;
case Acad::eDuplicateDxfField:lstrcpy(Glb_AcadErrorInfo,_T(“DXF字段重复”));break;
case Acad::eInvalidDxfCode:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的DXF编码”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eInvalidResBuf:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的ResBuf”));break;
case Acad::eBadDxfSequence:lstrcpy(Glb_AcadErrorInfo,_T(“不正确的DXF顺序”));break;
case Acad::eFilerError:lstrcpy(Glb_AcadErrorInfo,_T(“文件错误”));break;
case Acad::eVertexAfterFace:lstrcpy(Glb_AcadErrorInfo,_T(“顶点在面后面”));break;
case Acad::eInvalidFaceVertexIndex:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的面顶点顺序”));break;
case Acad::eInvalidMeshVertexIndex:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的mesh顺序”));break;
case Acad::eOtherObjectsBusy:lstrcpy(Glb_AcadErrorInfo,_T(“其它对象忙”));break;
case Acad::eMustFirstAddBlockToDb:lstrcpy(Glb_AcadErrorInfo,_T(“必须先把块加入到数据库”));break;
case Acad::eCannotNestBlockDefs:lstrcpy(Glb_AcadErrorInfo,_T(“不可以嵌套块定义”));break;
case Acad::eDwgRecoveredOK:lstrcpy(Glb_AcadErrorInfo,_T(“修复DWG完成”));break;
case Acad::eDwgNotRecoverable:lstrcpy(Glb_AcadErrorInfo,_T(“无法修复DWG”));break;
case Acad::eDxfPartiallyRead:lstrcpy(Glb_AcadErrorInfo,_T(“DXF部分读取”));break;
case Acad::eDxfReadAborted:lstrcpy(Glb_AcadErrorInfo,_T(“读取DXF终止”));break;
case Acad::eDxbPartiallyRead:lstrcpy(Glb_AcadErrorInfo,_T(“DXB部分读取”));break;
case Acad::eDwgCRCDoesNotMatch:lstrcpy(Glb_AcadErrorInfo,_T(“DWG文件的CRC不匹配”));break;
case Acad::eDwgSentinelDoesNotMatch:lstrcpy(Glb_AcadErrorInfo,_T(“DWG文件的校验不匹配”));break;
case Acad::eDwgObjectImproperlyRead:lstrcpy(Glb_AcadErrorInfo,_T(“DWG文件错误读取”));break;
case Acad::eNoInputFiler:lstrcpy(Glb_AcadErrorInfo,_T(“没有找到输入过滤”));break;
case Acad::eDwgNeedsAFullSave:lstrcpy(Glb_AcadErrorInfo,_T(“DWG需要完全保存”));break;
case Acad::eDxbReadAborted:lstrcpy(Glb_AcadErrorInfo,_T(“DXB读取终止”));break;
case Acad::eFileLockedByACAD:lstrcpy(Glb_AcadErrorInfo,_T(“文件被ACAD锁定”));break;
case Acad::eFileAccessErr:lstrcpy(Glb_AcadErrorInfo,_T(“无法读取文件”));break;
case Acad::eFileSystemErr:lstrcpy(Glb_AcadErrorInfo,_T(“文件系统错误”));break;
case Acad::eFileInternalErr:lstrcpy(Glb_AcadErrorInfo,_T(“文件内部错误”));break;
case Acad::eFileTooManyOpen:lstrcpy(Glb_AcadErrorInfo,_T(“文件被打开太多次”));break;
case Acad::eFileNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“未找到文件”));break;
case Acad::eDwkLockFileFound:lstrcpy(Glb_AcadErrorInfo,_T(“找到DWG锁定文件”));break;
case Acad::eWasErased:lstrcpy(Glb_AcadErrorInfo,_T(“对象被删除”));break;
case Acad::ePermanentlyErased:lstrcpy(Glb_AcadErrorInfo,_T(“对象被永久删除”));break;
case Acad::eWasOpenForRead:lstrcpy(Glb_AcadErrorInfo,_T(“对象只读打开”));break;
case Acad::eWasOpenForWrite:lstrcpy(Glb_AcadErrorInfo,_T(“对象可写打开”));break;
case Acad::eWasOpenForUndo:lstrcpy(Glb_AcadErrorInfo,_T(“对象撤销打开”));break;
case Acad::eWasNotifying:lstrcpy(Glb_AcadErrorInfo,_T(“对象被通知”));break;
case Acad::eWasOpenForNotify:lstrcpy(Glb_AcadErrorInfo,_T(“对象通知打开”));break;
case Acad::eOnLockedLayer:lstrcpy(Glb_AcadErrorInfo,_T(“对象在锁定图层上”));break;
case Acad::eMustOpenThruOwner:lstrcpy(Glb_AcadErrorInfo,_T(“必须经过所有者打开”));break;
case Acad::eSubentitiesStillOpen:lstrcpy(Glb_AcadErrorInfo,_T(“子对象依然打开着”));break;
case Acad::eAtMaxReaders:lstrcpy(Glb_AcadErrorInfo,_T(“超过最大打开次数”));break;
case Acad::eIsWriteProtected:lstrcpy(Glb_AcadErrorInfo,_T(“对象被写保护”));break;
case Acad::eIsXRefObject:lstrcpy(Glb_AcadErrorInfo,_T(“对象是XRef”));break;
case Acad::eNotAnEntity:lstrcpy(Glb_AcadErrorInfo,_T(“对象不是实体”));break;
case Acad::eHadMultipleReaders:lstrcpy(Glb_AcadErrorInfo,_T(“被多重打开”));break;
case Acad::eDuplicateRecordName:lstrcpy(Glb_AcadErrorInfo,_T(“重复的记录名称”));break;
case Acad::eXRefDependent:lstrcpy(Glb_AcadErrorInfo,_T(“依赖于XREF”));break;
case Acad::eSelfReference:lstrcpy(Glb_AcadErrorInfo,_T(“引用自身”));break;
case Acad::eMissingSymbolTable:lstrcpy(Glb_AcadErrorInfo,_T(“丢失符号化表”));break;
case Acad::eMissingSymbolTableRec:lstrcpy(Glb_AcadErrorInfo,_T(“丢失符号化记录”));break;
case Acad::eWasNotOpenForWrite:lstrcpy(Glb_AcadErrorInfo,_T(“不是可写打开”));break;
case Acad::eCloseWasNotifying:lstrcpy(Glb_AcadErrorInfo,_T(“对象关闭,正在执行通知”));break;
case Acad::eCloseModifyAborted:lstrcpy(Glb_AcadErrorInfo,_T(“对象关闭,修改被取消”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eClosePartialFailure:lstrcpy(Glb_AcadErrorInfo,_T(“对象关闭,部分操作未成功”));break;
case Acad::eCloseFailObjectDamaged:lstrcpy(Glb_AcadErrorInfo,_T(“对象被损坏,关闭失败”));break;
case Acad::eCannotBeErasedByCaller:lstrcpy(Glb_AcadErrorInfo,_T(“对象不可以被当前呼叫者删除”));break;
case Acad::eCannotBeResurrected:lstrcpy(Glb_AcadErrorInfo,_T(“不可以复活”));break;
case Acad::eWasNotErased:lstrcpy(Glb_AcadErrorInfo,_T(“对象未删除”));break;
case Acad::eInsertAfter:lstrcpy(Glb_AcadErrorInfo,_T(“在后面插入”));break;
case Acad::eFixedAllErrors:lstrcpy(Glb_AcadErrorInfo,_T(“修复了所有错误”));break;
case Acad::eLeftErrorsUnfixed:lstrcpy(Glb_AcadErrorInfo,_T(“剩下一些错误未修复”));break;
case Acad::eUnrecoverableErrors:lstrcpy(Glb_AcadErrorInfo,_T(“不可恢复的错误”));break;
case Acad::eNoDatabase:lstrcpy(Glb_AcadErrorInfo,_T(“没有数据库”));break;
case Acad::eXdataSizeExceeded:lstrcpy(Glb_AcadErrorInfo,_T(“扩展数据长度太大”));break;
case Acad::eRegappIdNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“没有找到扩展数据注册ID”));break;
case Acad::eRepeatEntity:lstrcpy(Glb_AcadErrorInfo,_T(“重复实体”));break;
case Acad::eRecordNotInTable:lstrcpy(Glb_AcadErrorInfo,_T(“表中未找到记录”));break;
case Acad::eIteratorDone:lstrcpy(Glb_AcadErrorInfo,_T(“迭代器完成”));break;
case Acad::eNullIterator:lstrcpy(Glb_AcadErrorInfo,_T(“空的迭代器”));break;
case Acad::eNotInBlock:lstrcpy(Glb_AcadErrorInfo,_T(“不在块中”));break;
case Acad::eOwnerNotInDatabase:lstrcpy(Glb_AcadErrorInfo,_T(“所有者不在数据库中”));break;
case Acad::eOwnerNotOpenForRead:lstrcpy(Glb_AcadErrorInfo,_T(“所有者不是只读打开”));break;
case Acad::eOwnerNotOpenForWrite:lstrcpy(Glb_AcadErrorInfo,_T(“所有者不是可写打开”));break;
case Acad::eExplodeBeforeTransform:lstrcpy(Glb_AcadErrorInfo,_T(“在变换之前就被炸开了”));break;
case Acad::eCannotScaleNonUniformly:lstrcpy(Glb_AcadErrorInfo,_T(“不可以不同比例缩放”));break;
case Acad::eNotInDatabase:lstrcpy(Glb_AcadErrorInfo,_T(“不在数据库中”));break;
case Acad::eNotCurrentDatabase:lstrcpy(Glb_AcadErrorInfo,_T(“不是当前数据库”));break;
case Acad::eIsAnEntity:lstrcpy(Glb_AcadErrorInfo,_T(“是一个实体”));break;
case Acad::eCannotChangeActiveViewport:lstrcpy(Glb_AcadErrorInfo,_T(“不可以改变活动视口”));break;
case Acad::eNotInPaperspace:lstrcpy(Glb_AcadErrorInfo,_T(“不在图纸空间中”));break;
case Acad::eCommandWasInProgress:lstrcpy(Glb_AcadErrorInfo,_T(“正在执行命令”));break;
case Acad::eGeneralModelingFailure:lstrcpy(Glb_AcadErrorInfo,_T(“创建模型失败”));break;
case Acad::eOutOfRange:lstrcpy(Glb_AcadErrorInfo,_T(“超出范围”));break;
case Acad::eNonCoplanarGeometry:lstrcpy(Glb_AcadErrorInfo,_T(“没有平面几何对象”));break;
case Acad::eDegenerateGeometry:lstrcpy(Glb_AcadErrorInfo,_T(“退化的几何对象”));break;
case Acad::eInvalidAxis:lstrcpy(Glb_AcadErrorInfo,_T(“无效的轴线”));break;
case Acad::ePointNotOnEntity:lstrcpy(Glb_AcadErrorInfo,_T(“点不在实体上”));break;
case Acad::eSingularPoint:lstrcpy(Glb_AcadErrorInfo,_T(“单一的点”));break;
case Acad::eInvalidOffset:lstrcpy(Glb_AcadErrorInfo,_T(“无效的偏移”));break;
case Acad::eNonPlanarEntity:lstrcpy(Glb_AcadErrorInfo,_T(“没有平面的实体”));break;
case Acad::eCannotExplodeEntity:lstrcpy(Glb_AcadErrorInfo,_T(“不可分解的实体”));break;
case Acad::eStringTooLong:lstrcpy(Glb_AcadErrorInfo,_T(“字符串太短”));break;
case Acad::eInvalidSymTableFlag:lstrcpy(Glb_AcadErrorInfo,_T(“无效的符号化表标志”));break;
case Acad::eUndefinedLineType:lstrcpy(Glb_AcadErrorInfo,_T(“没有定义的线型”));break;
case Acad::eInvalidTextStyle:lstrcpy(Glb_AcadErrorInfo,_T(“无效的字体样式”));break;
case Acad::eTooFewLineTypeElements:lstrcpy(Glb_AcadErrorInfo,_T(“太少的线型要素”));break;
case Acad::eTooManyLineTypeElements:lstrcpy(Glb_AcadErrorInfo,_T(“太多的线型要素”));break;
case Acad::eExcessiveItemCount:lstrcpy(Glb_AcadErrorInfo,_T(“过多的项目”));break;
case Acad::eIgnoredLinetypeRedef:lstrcpy(Glb_AcadErrorInfo,_T(“忽略线型定义描述”));break;
case Acad::eBadUCS:lstrcpy(Glb_AcadErrorInfo,_T(“不好的用户坐标系”));break;
case Acad::eBadPaperspaceView:lstrcpy(Glb_AcadErrorInfo,_T(“不好的图纸空间视图”));break;
case Acad::eSomeInputDataLeftUnread:lstrcpy(Glb_AcadErrorInfo,_T(“一些输入数据未被读取”));break;
case Acad::eNoInternalSpace:lstrcpy(Glb_AcadErrorInfo,_T(“不是内部空间”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eInvalidDimStyle:lstrcpy(Glb_AcadErrorInfo,_T(“无效的标注样式”));break;
case Acad::eInvalidLayer:lstrcpy(Glb_AcadErrorInfo,_T(“无效的图层”));break;
case Acad::eUserBreak:lstrcpy(Glb_AcadErrorInfo,_T(“用户打断”));break;
case Acad::eDwgNeedsRecovery:lstrcpy(Glb_AcadErrorInfo,_T(“DWG文件需要修复”));break;
case Acad::eDeleteEntity:lstrcpy(Glb_AcadErrorInfo,_T(“删除实体”));break;
case Acad::eInvalidFix:lstrcpy(Glb_AcadErrorInfo,_T(“无效的方位”));break;
case Acad::eFSMError:lstrcpy(Glb_AcadErrorInfo,_T(“FSM错误”));break;
case Acad::eBadLayerName:lstrcpy(Glb_AcadErrorInfo,_T(“不好的图层名称”));break;
case Acad::eLayerGroupCodeMissing:lstrcpy(Glb_AcadErrorInfo,_T(“图层分组编码丢失”));break;
case Acad::eBadColorIndex:lstrcpy(Glb_AcadErrorInfo,_T(“不好的颜色索引号”));break;
case Acad::eBadLinetypeName:lstrcpy(Glb_AcadErrorInfo,_T(“不好的线型名称”));break;
case Acad::eBadLinetypeScale:lstrcpy(Glb_AcadErrorInfo,_T(“不好的线型缩放比例”));break;
case Acad::eBadVisibilityValue:lstrcpy(Glb_AcadErrorInfo,_T(“不好的可见性值”));break;
case Acad::eProperClassSeparatorExpected:lstrcpy(Glb_AcadErrorInfo,_T(“本身类未找到预期的分割符号(?)”));break;
case Acad::eBadLineWeightValue:lstrcpy(Glb_AcadErrorInfo,_T(“不好的线宽值”));break;
case Acad::eBadColor:lstrcpy(Glb_AcadErrorInfo,_T(“不好的颜色”));break;
case Acad::ePagerError:lstrcpy(Glb_AcadErrorInfo,_T(“页面错误”));break;
case Acad::eOutOfPagerMemory:lstrcpy(Glb_AcadErrorInfo,_T(“页面内存不足”));break;
case Acad::ePagerWriteError:lstrcpy(Glb_AcadErrorInfo,_T(“页面不可写”));break;
case Acad::eWasNotForwarding:lstrcpy(Glb_AcadErrorInfo,_T(“不是促进(?)”));break;
case Acad::eInvalidIdMap:lstrcpy(Glb_AcadErrorInfo,_T(“无效的ID字典”));break;
case Acad::eInvalidOwnerObject:lstrcpy(Glb_AcadErrorInfo,_T(“无效的所有者”));break;
case Acad::eOwnerNotSet:lstrcpy(Glb_AcadErrorInfo,_T(“未设置所有者”));break;
case Acad::eWrongSubentityType:lstrcpy(Glb_AcadErrorInfo,_T(“错误的子对象类型”));break;
case Acad::eTooManyVertices:lstrcpy(Glb_AcadErrorInfo,_T(“太多节点”));break;
case Acad::eTooFewVertices:lstrcpy(Glb_AcadErrorInfo,_T(“太少节点”));break;
case Acad::eNoActiveTransactions:lstrcpy(Glb_AcadErrorInfo,_T(“不活动的事务”));break;
case Acad::eNotTopTransaction:lstrcpy(Glb_AcadErrorInfo,_T(“不是最顶层的事务”));break;
case Acad::eTransactionOpenWhileCommandEnded:lstrcpy(Glb_AcadErrorInfo,_T(“在命令结束的时候打开(/开始)事务”));break;
case Acad::eInProcessOfCommitting:lstrcpy(Glb_AcadErrorInfo,_T(“在提交事务的过程中”));break;
case Acad::eNotNewlyCreated:lstrcpy(Glb_AcadErrorInfo,_T(“不是新创建的”));break;
case Acad::eLongTransReferenceError:lstrcpy(Glb_AcadErrorInfo,_T(“长事务引用错误”));break;
case Acad::eNoWorkSet:lstrcpy(Glb_AcadErrorInfo,_T(“没有工作集”));break;
case Acad::eAlreadyInGroup:lstrcpy(Glb_AcadErrorInfo,_T(“已经在组中了”));break;
case Acad::eNotInGroup:lstrcpy(Glb_AcadErrorInfo,_T(“不在组中”));break;
case Acad::eInvalidREFIID:lstrcpy(Glb_AcadErrorInfo,_T(“无效的REFIID”));break;
case Acad::eInvalidNormal:lstrcpy(Glb_AcadErrorInfo,_T(“无效的标准”));break;
case Acad::eInvalidStyle:lstrcpy(Glb_AcadErrorInfo,_T(“无效的样式”));break;
case Acad::eCannotRestoreFromAcisFile:lstrcpy(Glb_AcadErrorInfo,_T(“不可以从Acis(?)文件中恢复”));break;
case Acad::eMakeMeProxy:lstrcpy(Glb_AcadErrorInfo,_T(“自我代理”));break;
case Acad::eNLSFileNotAvailable:lstrcpy(Glb_AcadErrorInfo,_T(“无效的NLS文件”));break;
case Acad::eNotAllowedForThisProxy:lstrcpy(Glb_AcadErrorInfo,_T(“不允许这个代理”));break;
case Acad::eNotSupportedInDwgApi:lstrcpy(Glb_AcadErrorInfo,_T(“在Dwg Api中不支持”));break;
case Acad::ePolyWidthLost:lstrcpy(Glb_AcadErrorInfo,_T(“多段线宽度丢失”));break;
case Acad::eNullExtents:lstrcpy(Glb_AcadErrorInfo,_T(“空的空间范围”));break;
case Acad::eExplodeAgain:lstrcpy(Glb_AcadErrorInfo,_T(“再一次分解”));break;
case Acad::eBadDwgHeader:lstrcpy(Glb_AcadErrorInfo,_T(“坏的DWG文件头”));break;
case Acad::eLockViolation:lstrcpy(Glb_AcadErrorInfo,_T(“锁定妨碍当前操作”));break;
case Acad::eLockConflict:lstrcpy(Glb_AcadErrorInfo,_T(“锁定冲突”));break;
case Acad::eDatabaseObjectsOpen:lstrcpy(Glb_AcadErrorInfo,_T(“数据库对象打开”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eLockChangeInProgress:lstrcpy(Glb_AcadErrorInfo,_T(“锁定改变中”));break;
case Acad::eVetoed:lstrcpy(Glb_AcadErrorInfo,_T(“禁止”));break;
case Acad::eNoDocument:lstrcpy(Glb_AcadErrorInfo,_T(“没有文档”));break;
case Acad::eNotFromThisDocument:lstrcpy(Glb_AcadErrorInfo,_T(“不是从这个文档”));break;
case Acad::eLISPActive:lstrcpy(Glb_AcadErrorInfo,_T(“LISP活动”));break;
case Acad::eTargetDocNotQuiescent:lstrcpy(Glb_AcadErrorInfo,_T(“目标文档活动中”));break;
case Acad::eDocumentSwitchDisabled:lstrcpy(Glb_AcadErrorInfo,_T(“禁止文档转换”));break;
case Acad::eInvalidContext:lstrcpy(Glb_AcadErrorInfo,_T(“无效的上下文环境”));break;
case Acad::eCreateFailed:lstrcpy(Glb_AcadErrorInfo,_T(“创建失败”));break;
case Acad::eCreateInvalidName:lstrcpy(Glb_AcadErrorInfo,_T(“创建无效名称”));break;
case Acad::eSetFailed:lstrcpy(Glb_AcadErrorInfo,_T(“设置失败”));break;
case Acad::eDelDoesNotExist:lstrcpy(Glb_AcadErrorInfo,_T(“删除对象不存在”));break;
case Acad::eDelIsModelSpace:lstrcpy(Glb_AcadErrorInfo,_T(“删除模型空间”));break;
case Acad::eDelLastLayout:lstrcpy(Glb_AcadErrorInfo,_T(“删除最后一个布局”));break;
case Acad::eDelUnableToSetCurrent:lstrcpy(Glb_AcadErrorInfo,_T(“删除后无法设置当前对象”));break;
case Acad::eDelUnableToFind:lstrcpy(Glb_AcadErrorInfo,_T(“没有找到删除对象”));break;
case Acad::eRenameDoesNotExist:lstrcpy(Glb_AcadErrorInfo,_T(“重命名对象不存在”));break;
case Acad::eRenameIsModelSpace:lstrcpy(Glb_AcadErrorInfo,_T(“不可以重命令模型空间”));break;
case Acad::eRenameInvalidLayoutName:lstrcpy(Glb_AcadErrorInfo,_T(“重命名无效的布局名称”));break;
case Acad::eRenameLayoutAlreadyExists:lstrcpy(Glb_AcadErrorInfo,_T(“重命名布局名称已存在”));break;
case Acad::eRenameInvalidName:lstrcpy(Glb_AcadErrorInfo,_T(“重命名无效名称”));break;
case Acad::eCopyDoesNotExist:lstrcpy(Glb_AcadErrorInfo,_T(“拷贝不存在”));break;
case Acad::eCopyIsModelSpace:lstrcpy(Glb_AcadErrorInfo,_T(“拷贝是模型空间”));break;
case Acad::eCopyFailed:lstrcpy(Glb_AcadErrorInfo,_T(“拷贝失败”));break;
case Acad::eCopyInvalidName:lstrcpy(Glb_AcadErrorInfo,_T(“拷贝无效名称”));break;
case Acad::eCopyNameExists:lstrcpy(Glb_AcadErrorInfo,_T(“拷贝名称存在”));break;
case Acad::eProfileDoesNotExist:lstrcpy(Glb_AcadErrorInfo,_T(“配置名称不存在”));break;
case Acad::eInvalidFileExtension:lstrcpy(Glb_AcadErrorInfo,_T(“无效的文件后缀名成”));break;
case Acad::eInvalidProfileName:lstrcpy(Glb_AcadErrorInfo,_T(“无效的配置文件名称”));break;
case Acad::eFileExists:lstrcpy(Glb_AcadErrorInfo,_T(“文件存在”));break;
case Acad::eProfileIsInUse:lstrcpy(Glb_AcadErrorInfo,_T(“配置文件存在”));break;
case Acad::eCantOpenFile:lstrcpy(Glb_AcadErrorInfo,_T(“打开文件失败”));break;
case Acad::eNoFileName:lstrcpy(Glb_AcadErrorInfo,_T(“没有文件名称”));break;
case Acad::eRegistryAccessError:lstrcpy(Glb_AcadErrorInfo,_T(“读取注册表错误”));break;
case Acad::eRegistryCreateError:lstrcpy(Glb_AcadErrorInfo,_T(“创建注册表项错误”));break;
case Acad::eBadDxfFile:lstrcpy(Glb_AcadErrorInfo,_T(“坏的DXF文件”));break;
case Acad::eUnknownDxfFileFormat:lstrcpy(Glb_AcadErrorInfo,_T(“未知的DXF文件格式”));break;
case Acad::eMissingDxfSection:lstrcpy(Glb_AcadErrorInfo,_T(“丢失DXF分段”));break;
case Acad::eInvalidDxfSectionName:lstrcpy(Glb_AcadErrorInfo,_T(“无效的DXF分段名称”));break;
case Acad::eNotDxfHeaderGroupCode:lstrcpy(Glb_AcadErrorInfo,_T(“无效的DXF组码”));break;
case Acad::eUndefinedDxfGroupCode:lstrcpy(Glb_AcadErrorInfo,_T(“没有定义DXF组码”));break;
case Acad::eNotInitializedYet:lstrcpy(Glb_AcadErrorInfo,_T(“没有初始化”));break;
case Acad::eInvalidDxf2dPoint:lstrcpy(Glb_AcadErrorInfo,_T(“无效的DXF二维点”));break;
case Acad::eInvalidDxf3dPoint:lstrcpy(Glb_AcadErrorInfo,_T(“无效的DXD三维点”));break;
case Acad::eBadlyNestedAppData:lstrcpy(Glb_AcadErrorInfo,_T(“坏的嵌套应用程序数据”));break;
case Acad::eIncompleteBlockDefinition:lstrcpy(Glb_AcadErrorInfo,_T(“不完整的块定义”));break;
case Acad::eIncompleteComplexObject:lstrcpy(Glb_AcadErrorInfo,_T(“不完整的合成(?复杂)对象”));break;
case Acad::eBlockDefInEntitySection:lstrcpy(Glb_AcadErrorInfo,_T(“块定义在实体段中”));break;
case Acad::eNoBlockBegin:lstrcpy(Glb_AcadErrorInfo,_T(“没有块开始”));break;
case Acad::eDuplicateLayerName:lstrcpy(Glb_AcadErrorInfo,_T(“重复的图层名称”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eBadPlotStyleName:lstrcpy(Glb_AcadErrorInfo,_T(“不好的打印样式名称”));break;
case Acad::eDuplicateBlockName:lstrcpy(Glb_AcadErrorInfo,_T(“重复的块名称”));break;
case Acad::eBadPlotStyleType:lstrcpy(Glb_AcadErrorInfo,_T(“不好的打印样式类型”));break;
case Acad::eBadPlotStyleNameHandle:lstrcpy(Glb_AcadErrorInfo,_T(“不好的打印样式名称句柄”));break;
case Acad::eUndefineShapeName:lstrcpy(Glb_AcadErrorInfo,_T(“没有定义形状名称”));break;
case Acad::eDuplicateBlockDefinition:lstrcpy(Glb_AcadErrorInfo,_T(“重复的块定义”));break;
case Acad::eMissingBlockName:lstrcpy(Glb_AcadErrorInfo,_T(“丢失了块名称”));break;
case Acad::eBinaryDataSizeExceeded:lstrcpy(Glb_AcadErrorInfo,_T(“二进制数据长度太长”));break;
case Acad::eObjectIsReferenced:lstrcpy(Glb_AcadErrorInfo,_T(“对象被引用”));break;
case Acad::eNoThumbnailBitmap:lstrcpy(Glb_AcadErrorInfo,_T(“没有缩略图”));break;
case Acad::eGuidNoAddress:lstrcpy(Glb_AcadErrorInfo,_T(“未找到GUID地址”));break;
case Acad::eMustBe0to2:lstrcpy(Glb_AcadErrorInfo,_T(“必须是0到2”));break;
case Acad::eMustBe0to3:lstrcpy(Glb_AcadErrorInfo,_T(“必须是0到3”));break;
case Acad::eMustBe0to4:lstrcpy(Glb_AcadErrorInfo,_T(“必须是0到4”));break;
case Acad::eMustBe0to5:lstrcpy(Glb_AcadErrorInfo,_T(“必须是0到5”));break;
case Acad::eMustBe0to8:lstrcpy(Glb_AcadErrorInfo,_T(“必须是0到8”));break;
case Acad::eMustBe1to8:lstrcpy(Glb_AcadErrorInfo,_T(“必须是1到8”));break;
case Acad::eMustBe1to15:lstrcpy(Glb_AcadErrorInfo,_T(“必须是1到15”));break;
case Acad::eMustBePositive:lstrcpy(Glb_AcadErrorInfo,_T(“必须为正数”));break;
case Acad::eMustBeNonNegative:lstrcpy(Glb_AcadErrorInfo,_T(“必须为非负数”));break;
case Acad::eMustBeNonZero:lstrcpy(Glb_AcadErrorInfo,_T(“不可以等于0”));break;
case Acad::eMustBe1to6:lstrcpy(Glb_AcadErrorInfo,_T(“必须是1到6”));break;
case Acad::eNoPlotStyleTranslationTable:lstrcpy(Glb_AcadErrorInfo,_T(“没有打印样式事务表(?)”));break;
case Acad::ePlotStyleInColorDependentMode:lstrcpy(Glb_AcadErrorInfo,_T(“打印样式依赖颜色”));break;
case Acad::eMaxLayouts:lstrcpy(Glb_AcadErrorInfo,_T(“最大布局数量”));break;
case Acad::eNoClassId:lstrcpy(Glb_AcadErrorInfo,_T(“没有类ID”));break;
case Acad::eUndoOperationNotAvailable:lstrcpy(Glb_AcadErrorInfo,_T(“撤销操作无效”));break;
case Acad::eUndoNoGroupBegin:lstrcpy(Glb_AcadErrorInfo,_T(“撤销操作没有组开始”));break;
case Acad::eHatchTooDense:lstrcpy(Glb_AcadErrorInfo,_T(“填充太密集”));break;
case Acad::eOpenFileCancelled:lstrcpy(Glb_AcadErrorInfo,_T(“打开文件取消”));break;
case Acad::eNotHandled:lstrcpy(Glb_AcadErrorInfo,_T(“没有处理”));break;
case Acad::eMakeMeProxyAndResurrect:lstrcpy(Glb_AcadErrorInfo,_T(“将自己变成代理然后复活”));break;
case Acad::eFileMissingSections:lstrcpy(Glb_AcadErrorInfo,_T(“文件丢失分段”));break;
case Acad::eRepeatedDwgRead:lstrcpy(Glb_AcadErrorInfo,_T(“重复的读取DWG文件”));break;
case Acad::eWrongCellType:lstrcpy(Glb_AcadErrorInfo,_T(“错误的单元格类型”));break;
case Acad::eCannotChangeColumnType:lstrcpy(Glb_AcadErrorInfo,_T(“不可以改变列类型”));break;
case Acad::eRowsMustMatchColumns:lstrcpy(Glb_AcadErrorInfo,_T(“行必须匹配列”));break;
case Acad::eFileSharingViolation:lstrcpy(Glb_AcadErrorInfo,_T(“文件共享妨碍”));break;
case Acad::eUnsupportedFileFormat:lstrcpy(Glb_AcadErrorInfo,_T(“不支持的文件格式”));break;
case Acad::eObsoleteFileFormat:lstrcpy(Glb_AcadErrorInfo,_T(“废弃的文件格式”));break;
case Acad::eDwgShareDemandLoad:lstrcpy(Glb_AcadErrorInfo,_T(“DWG共享要求加载(?)”));break;
case Acad::eDwgShareReadAccess:lstrcpy(Glb_AcadErrorInfo,_T(“DWG共享读取”));break;
case Acad::eDwgShareWriteAccess:lstrcpy(Glb_AcadErrorInfo,_T(“DWG共享写入”));break;
case Acad::eLoadFailed:lstrcpy(Glb_AcadErrorInfo,_T(“加载失败”));break;
case Acad::eDeviceNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“驱动未找到”));break;
case Acad::eNoCurrentConfig:lstrcpy(Glb_AcadErrorInfo,_T(“没有当前配置”));break;
case Acad::eNullPtr:lstrcpy(Glb_AcadErrorInfo,_T(“空指针”));break;
case Acad::eNoLayout:lstrcpy(Glb_AcadErrorInfo,_T(“没有布局”));break;
case Acad::eIncompatiblePlotSettings:lstrcpy(Glb_AcadErrorInfo,_T(“不兼容的打印设置”));break;
case Acad::eNonePlotDevice:lstrcpy(Glb_AcadErrorInfo,_T(“没有打印驱动”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eNoMatchingMedia:lstrcpy(Glb_AcadErrorInfo,_T(“没有匹配的打印尺寸”));break;
case Acad::eInvalidView:lstrcpy(Glb_AcadErrorInfo,_T(“无效的视图”));break;
case Acad::eInvalidWindowArea:lstrcpy(Glb_AcadErrorInfo,_T(“无效的窗口范围”));break;
case Acad::eInvalidPlotArea:lstrcpy(Glb_AcadErrorInfo,_T(“无效的打印范围”));break;
case Acad::eCustomSizeNotPossible:lstrcpy(Glb_AcadErrorInfo,_T(“用户输入的打印尺寸不可能存在”));break;
case Acad::ePageCancelled:lstrcpy(Glb_AcadErrorInfo,_T(“纸张取消”));break;
case Acad::ePlotCancelled:lstrcpy(Glb_AcadErrorInfo,_T(“打印取消”));break;
case Acad::eInvalidEngineState:lstrcpy(Glb_AcadErrorInfo,_T(“无效的引擎状态”));break;
case Acad::ePlotAlreadyStarted:lstrcpy(Glb_AcadErrorInfo,_T(“已经开始在打印了”));break;
case Acad::eNoErrorHandler:lstrcpy(Glb_AcadErrorInfo,_T(“没有错误处理”));break;
case Acad::eInvalidPlotInfo:lstrcpy(Glb_AcadErrorInfo,_T(“无效的打印信息”));break;
case Acad::eNumberOfCopiesNotSupported:lstrcpy(Glb_AcadErrorInfo,_T(“不支持打印份数”));break;
case Acad::eLayoutNotCurrent:lstrcpy(Glb_AcadErrorInfo,_T(“不是当前布局”));break;
case Acad::eGraphicsNotGenerated:lstrcpy(Glb_AcadErrorInfo,_T(“绘图对象创建失败(?)”));break;
case Acad::eCannotPlotToFile:lstrcpy(Glb_AcadErrorInfo,_T(“不可以打印到文件”));break;
case Acad::eMustPlotToFile:lstrcpy(Glb_AcadErrorInfo,_T(“必须打印到文件”));break;
case Acad::eNotMultiPageCapable:lstrcpy(Glb_AcadErrorInfo,_T(“不支持多种纸张”));break;
case Acad::eBackgroundPlotInProgress:lstrcpy(Glb_AcadErrorInfo,_T(“正在后台打印”));break;
case Acad::eSubSelectionSetEmpty:lstrcpy(Glb_AcadErrorInfo,_T(“子选择集被设置为空”));break;
case Acad::eInvalidObjectId:lstrcpy(Glb_AcadErrorInfo,_T(“无效的对象ID或者对象ID不在当前数据库”));break;
case Acad::eInvalidXrefObjectId:lstrcpy(Glb_AcadErrorInfo,_T(“无效的XREF对象ID或者XREF对象ID不在当前数据库”));break;
case Acad::eNoViewAssociation:lstrcpy(Glb_AcadErrorInfo,_T(“未找到对应的视图对象”));break;
case Acad::eNoLabelBlock:lstrcpy(Glb_AcadErrorInfo,_T(“视口未找到关联的块”));break;
case Acad::eUnableToSetViewAssociation:lstrcpy(Glb_AcadErrorInfo,_T(“设置视图关联视口失败”));break;
case Acad::eUnableToGetViewAssociation:lstrcpy(Glb_AcadErrorInfo,_T(“无法找到关联的视图”));break;
case Acad::eUnableToSetLabelBlock:lstrcpy(Glb_AcadErrorInfo,_T(“无法设置关联的块”));break;
case Acad::eUnableToGetLabelBlock:lstrcpy(Glb_AcadErrorInfo,_T(“无法获取关联的块”));break;
case Acad::eUnableToRemoveAssociation:lstrcpy(Glb_AcadErrorInfo,_T(“无法移除视口关联对象”));break;
case Acad::eUnableToSyncModelView:lstrcpy(Glb_AcadErrorInfo,_T(“无法同步视口和模型空间视图”));break;
case Acad::eSecInitializationFailure:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)初始化错误”));break;
case Acad::eSecErrorReadingFile:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)读取文件错误”));break;
case Acad::eSecErrorWritingFile:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)写入文件错误”));break;
case Acad::eSecInvalidDigitalID:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)无效的数字ID”));break;
case Acad::eSecErrorGeneratingTimestamp:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)创建时间戳错误”));break;
case Acad::eSecErrorComputingSignature:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)电子签名错误”));break;
case Acad::eSecErrorWritingSignature:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)写入签名错误”));break;
case Acad::eSecErrorEncryptingData:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)加密数据错误”));break;
case Acad::eSecErrorCipherNotSupported:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)不支持的密码”));break;
case Acad::eSecErrorDecryptingData:lstrcpy(Glb_AcadErrorInfo,_T(“SEC(?)解密数据错误”));break;
//case Acad::eInetBase:lstrcpy(Glb_AcadErrorInfo,_T(“网络错误”));break;
case Acad::eInetOk:lstrcpy(Glb_AcadErrorInfo,_T(“网络正常”));break;
case Acad::eInetInCache:lstrcpy(Glb_AcadErrorInfo,_T(“在缓冲区中”));break;
case Acad::eInetFileNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“网络文件不存在”));break;
case Acad::eInetBadPath:lstrcpy(Glb_AcadErrorInfo,_T(“不好的网络路径”));break;
case Acad::eInetTooManyOpenFiles:lstrcpy(Glb_AcadErrorInfo,_T(“打开太多网络文件”));break;
case Acad::eInetFileAccessDenied:lstrcpy(Glb_AcadErrorInfo,_T(“打开网络文件被拒绝”));break;
case Acad::eInetInvalidFileHandle:lstrcpy(Glb_AcadErrorInfo,_T(“无效的网络文件句柄”));break;
case Acad::eInetDirectoryFull:lstrcpy(Glb_AcadErrorInfo,_T(“网络文件夹目录已满”));break;
case Acad::eInetHardwareError:lstrcpy(Glb_AcadErrorInfo,_T(“网络硬件错误”));break;
case Acad::eInetSharingViolation:lstrcpy(Glb_AcadErrorInfo,_T(“违反网络共享”));break;

 

///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
//作者:boitboy,网站:http://www.cadgj.com (CAD工具之家),大量实用ObjectArx开发教程,代码,CAD小工具
//代码可任意转载,使用,修改,再发布,没有任何限制.
///////////////请体谅作者的辛苦劳动,保留作者的版权申明////////////////////
case Acad::eInetDiskFull:lstrcpy(Glb_AcadErrorInfo,_T(“网络硬盘满了”));break;
case Acad::eInetFileGenericError:lstrcpy(Glb_AcadErrorInfo,_T(“网络文件创建错误”));break;
case Acad::eInetValidURL:lstrcpy(Glb_AcadErrorInfo,_T(“无效的URL地址”));break;
case Acad::eInetNotAnURL:lstrcpy(Glb_AcadErrorInfo,_T(“不是URL地址”));break;
case Acad::eInetNoWinInet:lstrcpy(Glb_AcadErrorInfo,_T(“没有WinInet(?)”));break;
case Acad::eInetOldWinInet:lstrcpy(Glb_AcadErrorInfo,_T(“旧的WinInet(?)”));break;
case Acad::eInetNoAcadInet:lstrcpy(Glb_AcadErrorInfo,_T(“无法连接ACAD网站”));break;
case Acad::eInetNotImplemented:lstrcpy(Glb_AcadErrorInfo,_T(“无法应用网络”));break;
case Acad::eInetProtocolNotSupported:lstrcpy(Glb_AcadErrorInfo,_T(“网络协议不支持”));break;
case Acad::eInetCreateInternetSessionFailed:lstrcpy(Glb_AcadErrorInfo,_T(“创建网络会话失败”));break;
case Acad::eInetInternetSessionConnectFailed:lstrcpy(Glb_AcadErrorInfo,_T(“连接网络会话失败”));break;
case Acad::eInetInternetSessionOpenFailed:lstrcpy(Glb_AcadErrorInfo,_T(“打开网络会话失败”));break;
case Acad::eInetInvalidAccessType:lstrcpy(Glb_AcadErrorInfo,_T(“无效的网络接收类型”));break;
case Acad::eInetFileOpenFailed:lstrcpy(Glb_AcadErrorInfo,_T(“打开网络文件失败”));break;
case Acad::eInetHttpOpenRequestFailed:lstrcpy(Glb_AcadErrorInfo,_T(“打开HTTP协议失败”));break;
case Acad::eInetUserCancelledTransfer:lstrcpy(Glb_AcadErrorInfo,_T(“用户取消了网络传输”));break;
case Acad::eInetHttpBadRequest:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的网络请求”));break;
case Acad::eInetHttpAccessDenied:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP协议拒绝”));break;
case Acad::eInetHttpPaymentRequired:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP协议要求付费”));break;
case Acad::eInetHttpRequestForbidden:lstrcpy(Glb_AcadErrorInfo,_T(“禁止HTTP请求”));break;
case Acad::eInetHttpObjectNotFound:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP对象未找到”));break;
case Acad::eInetHttpBadMethod:lstrcpy(Glb_AcadErrorInfo,_T(“不合理的HTTP请求方法”));break;
case Acad::eInetHttpNoAcceptableResponse:lstrcpy(Glb_AcadErrorInfo,_T(“不接受的HTTP回复”));break;
case Acad::eInetHttpProxyAuthorizationRequired:lstrcpy(Glb_AcadErrorInfo,_T(“要求HTTP代理授权”));break;
case Acad::eInetHttpTimedOut:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP超时”));break;
case Acad::eInetHttpConflict:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP冲突”));break;
case Acad::eInetHttpResourceGone:lstrcpy(Glb_AcadErrorInfo,_T(“网络资源被用光”));break;
case Acad::eInetHttpLengthRequired:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP请求长度是必须的”));break;
case Acad::eInetHttpPreconditionFailure:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP预处理失败”));break;
case Acad::eInetHttpRequestTooLarge:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP请求太大”));break;
case Acad::eInetHttpUriTooLong:lstrcpy(Glb_AcadErrorInfo,_T(“URL地址太长”));break;
case Acad::eInetHttpUnsupportedMedia:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP不支持的媒体”));break;
case Acad::eInetHttpServerError:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP服务器错误”));break;
case Acad::eInetHttpNotSupported:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP不支持”));break;
case Acad::eInetHttpBadGateway:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP网关错误”));break;
case Acad::eInetHttpServiceUnavailable:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP服务当前不可用”));break;
case Acad::eInetHttpGatewayTimeout:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP网关超时”));break;
case Acad::eInetHttpVersionNotSupported:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP版本不支持”));break;
case Acad::eInetInternetError:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP网络错误”));break;
case Acad::eInetGenericException:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP常规异常”));break;
case Acad::eInetUnknownError:lstrcpy(Glb_AcadErrorInfo,_T(“HTTP未知错误”));break;
case Acad::eAlreadyActive:lstrcpy(Glb_AcadErrorInfo,_T(“已经是活动的了”));break;
case Acad::eAlreadyInactive:lstrcpy(Glb_AcadErrorInfo,_T(“已经是不活动的了”));break;
default:
lstrcpy(Glb_AcadErrorInfo,acadErrorStatusText(es));
//Unknown error
replace(Glb_AcadErrorInfo,_T(“Unknown error”),_T(“未知错误”));
break;
}
return Glb_AcadErrorInfo;
}

发表在 ObjectArx | 标签为 , | 留下评论

字符串替换

/*用s2串替换s中的s1串*/
void replace(TCHAR *s,TCHAR *s1,TCHAR *s2)
{
int nLen=lstrlen(s);
int nLen1=lstrlen(s1);
int nLen2=lstrlen(s2);
for(int i=0;i<nLen-nLen1+1;i++)
{
bool bSame=true;
for(int j=0;j<nLen1;j++)
{
if(s[i+j]!=s1[j])
{
bSame=false;
break;
}
}
if(!bSame)
{
continue;
}

//i+nLen1是原来的字符串的后面部分开始
if(nLen1>nLen2)
{
//替换后字符串变短nLen1-nLen2
for(int k=0;k<nLen2;k++)
{
s[i+k]=s2[k];
}

for(int l=i+nLen2;l<nLen+nLen2-nLen1;l++)
{
s[l]=s[l+nLen1-nLen2];
}
for(int m=nLen+nLen2-nLen1;m<nLen;m++)
{
s[m]=’\0′;
}
nLen=lstrlen(s);
i=i+nLen2;
}
else if(nLen2>nLen1)
{
//替换后字符串变长了nLen2-nLen1
//先将替换时占用到的位置整体后移
for(int l=nLen+nLen2-nLen1;l>=i+nLen2;l–)
{
s[l]=s[l+nLen1-nLen2];
}
for(int k=0;k<nLen2;k++)
{
s[i+k]=s2[k];
}
nLen=lstrlen(s);
i=i+nLen2;
}

 

}
}

发表在 C++ | 留下评论

CString.Format的详细用法

转载:http://www.cnblogs.com/zlintokyo/archive/2011/09/28/2193885.html

在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。

先看看Format用于转换的格式字符:

%c                 单个字符

%d                 十进制整数(int)

%ld                十进制整数(long)

%f                 十进制浮点数(float)

%lf                十进制浮点数(double)

%o                 八进制数

%s                 字符串

%u                 无符号十进制数

%x                 十六进制数

1、int转换为CString:

CString str;

int number=15;

//str=”15″

str.Format(_T(“%d”),number);

//str=” 15″(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

str.Format(_T(“%4d”),number);

//str=”0015″(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

str.Format(_T(“%.4d”),number);

long转换为CString的方法与上面相似,只需要把%d改为%ld就可以了。

2、double转换为CString:

CString str;

double num=1.46;

//str=”1.46″

str.Format(_T(“%lf”),num);

//str=”1.5″(.1表示小数点后留1位,小数点后超过1位则四舍五入)

str.Format(_T(“%.1lf”),num);

//str=”1.4600″

str.Format(_T(“%.4f”),num);

//str=” 1.4600″(前面有1个空格)

str.Format(_T(“%7.4f”),num);

float转换为CString的方法也同上面相似,将lf%改为f%就可以了。

3、将十进制数转换为八进制:

CString str;

int num=255;

//str=”377″

str.Format(_T(“%o”),num);

//str=”00000377″

str.Format(_T(“%.8o”),num);

 

Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用:

格式化字符串forma(“%d”,12)意思是将一个整形的格式化的字符(我认为是保持其形状不变)
1).格式说明总是以%字符开始,以下是不同类型数据的格式方式%号后的说明:
d输出带符号十进制数
o输出无符号八进制数
x输出无符号十六进制数
u输出无符号数
c输出单个字符
s输出一串字符
f输出实数(6位小数)
e以指数形式输出实数
g选用f与e格式中输出宽度较小的格式,不输出0
ld输入输出long型数据
lf输入输出double型数据
m数据输出宽度为m
.n输出小数位数为n

一、字符串

首先看它的声明:
function Format(const Format: string; const Args: array of const): string; overload;
事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,
但并不多用,所以这里只对第一个介绍:

function Format(const Format: string; const Args: array of const): string; overload;
Format参数是一个格式字符串,用于格式化Args里面的值的。Args又是什么呢,
它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。
如以下例子:
Format(“my name is %6s”,”wind”);
返回后就是
my name is wind

现在来看Format参数的详细情况:
Format里面可以写普通的字符串,比如”my name is”
但有些格式指令字符具有特殊意义,比如”%6s”

格式指令具有以下的形式:
“%” [index “:”] [“-“] [width] [“.” prec] type
它是以”%”开始,而以type结束,type表示一个具体的类型。中间是用来
格式化type类型的指令字符,是可选的。

先来看看type,type可以是以下字符:
d 十制数,表示一个整型值
u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时
是一个2的32次方减去这个绝对值的数
如:Format(“this is %u”,-2);
返回的是:this is 4294967294
f 对应浮点数
e 科学表示法,对应整型数和浮点数,
比如Format(“this is %e”,-2.22);
返回的是:this is -2.220000E+000
等一下再说明如果将数的精度缩小
g 这个只能对应浮点型,且它会将值中多余的数去掉
比如Format(“this is %g”,02.200);
返回的是:this is 2.2
n 只能对应浮点型,将值转化为号码的形式。看一个例子就明白了
Format(“this is %n”,4552.2176);
返回的是this is 4,552.22
注意有两点,一是只表示到小数后两位,等一下说怎么消除这种情况
二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的
m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化
另外它只对应于浮点值
Format(“this is %m”,9552.21);
返回:this is ¥9,552.21
p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示
例如:
Format(“this is %p”,p);
Edit1的内容是:this is 0012F548
s 对应字符串类型,不用多说了吧
x 必须是一个整形值,以十六进制的形式返回
Format(“this is %X”,15);
返回是:this is F

类型讲述完毕,下面介绍格式化Type的指令:
[index “:”] 这个要怎么表达呢,看一个例子
Format(“this is %d %d”,12,13);
其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候
是这样 this is 12 13

而如果你这样定义:
Format(“this is %1:d %0:d”,12,13);
那么返回的字符串就变成了
this is 13 12
现在明白了吗,[index “:”] 中的index指示Args中参数显示的
顺序

还有一种情况,如果这样Format(“%d %d %d %0:d %d”, 1, 2, 3, 4) ;
将返回1 2 3 1 2。
如果你想返回的是1 2 3 1 4,必须这样定:
Format(“%d %d %d %0:d %3:d”, 1, 2, 3, 4) ;
但用的时候要注意,索引不能超出Args中的个数,不然会引起异常
如Format(“this is %2:d %0:d”,12,13);  //error
由于Args中只有12 13 两个数,所以Index只能是0或1,这里为2就错了
[width] 指定将被格式化的值占的宽度,看一个例子就明白了
Format(“this is %4d”,12);
输出是:this is 12
这个是比较容易,不过如果Width的值小于参数的长度,则没有效果。
如:Format(“this is %1d”,12);
输出是:this is 12
[“-“] 这个指定参数向左齐,和[width]合在一起最可以看到效果:
Format(“this is %-4d,yes”,12);
输出是:this is 12 ,yes

[“.” prec] 指定精度,对于浮点数效果最佳:
Format(‘this is %.2f’,[‘1.1234]);
输出 this is 1.12
Format(‘this is %.7f’,[‘1.1234]);
输了 this is 1.1234000

而对于整型数,如果prec比如整型的位数小,则没有效果
反之比整形值的位数大,则会在整型值的前面以0补之
Format(‘this is %.7d’,[1234]);
输出是:this is 0001234]

对于字符型,刚好和整型值相反,如果prec比字符串型的长度大
则没有效果,反之比字符串型的长度小,则会截断尾部的字符
Format(‘this is %.2s’,[‘1234’]);
输出是 this is 12

而上面说的这个例子:
Format(‘this is %e’,[-2.22]);
返回的是:this is -2.22000000000000E+000
怎么去掉多余的0呢,这个就行啦
Format(‘this is %.2e’,[-2.22]);

好了,第一个总算讲完了,应该对他的应用很熟悉了吧

m_result.Format(“您选的城市是:\r\n %s,\r\n您选的人是:\r\n%s”,city1 +  city2 +  city3,people);
UpdateData(0);

格式小结:
(1)最常用的格式是%d,含义是以10进制形式打印一个整数。
如果输出的整数是负数,则,输出的第一个字符就是‘-’号
(2)%u格式与%d格式类似,只不过要求打印无符号10进制整数。
(3)%o格式请求输出8进制整数
(4)%x和%X格式请求输出16进制整数。
%x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数
%X格式中用大写字母A,B,C,D,E,F来表示10到15之间的数
共同点:8进制和16进制整数总是作为无符号数处理的。
(5)%s格式用于打印字符串,与之对应的参数应该是一个字符指针,待输出的字符始于该指针所指向的地址,直到出现一个空字符(’\0’)
才终止。
(6)%c格式用于打印单个字符:例如:
printf(“%c”,c); 等价于 putchar?;
(7)%g,%f和%e这三个格式用于打印浮点值。
%g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二:
一,去掉该数尾多余的零(没有达到六位的数)
二,保留六位有效数字(多余六位的)
%e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:3.141593e+00
两者的区别:
%g格式打印出的数是总共6位有效数字
%e格式打印出小数点后的6位有效数字
%f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593
(但注意它的精度要求:也是小数点后6位有效数字)
(8)%%格式用于打印一个%字符。
(9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)
另外需要注意的一些知识点:

***************************************
对齐规则:
(1)当指定宽度大于要输出位数时,数右对齐,左端补空格
当前缀’-‘号时,想要数左对齐,右端补空格
大大的前提:只有当“指定宽度”存在时,前缀’-‘才有意义。
经验:一般来说,左端对齐的形式看上去要美观整齐一点。
***************************************
输出正负号的技巧:(记住)例如:
printf(“%+d %+d %+d\n”,-5,0,5);
只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号)
如果不希望正数的前面出现‘+’号,可用下面的方法

***************************************
只要在中间加个“ ”号(即:空格)就行。(记住)例如:
作用:如果一个数是非负数,就在它的前面插入一个空格。
int i;
for(i=-3;i<=3;i++)
printf(“% d\n”,i); //注意%和d之间有一个空格
输出结果如下:
-3
-2
-1
0
1
2
3
问题:如果‘+’和‘ ’同时出现在“中间”时,要以‘+’为准。
两个符号的共同点:用于对齐输出的数:(尤其对于小数来说)
两种格式:%+e和% e
C语言中基本的输入输出函数有:
putchar ():把变量中的一个字符常量输出到显示器屏幕上;
getchar ();从键盘上输入一个字符常量,此常量就是该函数的值;
printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上;
scanf ();从键盘上输入各类数据,并存放到程序变量中;
puts ():把数组变量中的一个字符串常量输出到显示器屏幕上;
gets ():从键盘上输入一个字符串常量并放到程序的数组中.
sscanf(); 从一个字符串中提取各类数据。
putchar() 和 getchar() 顾名思议就是从输入流中获取一个字符和输出一个字符,比较简单,不再多讲。
例子如下:
char c = getchar();
putchar?;
格式化输入输出scanf()和printf()是最有用的,所以重点讲一下。
printf():
一般形式:
printf(“格式控制”.输出列表);
eg : printf(“a=%d,b=%f,c=%c\n”,a,b,c);
1;格式控制.
格式控制是用双引号括起来的字符串,也称”转换控制字符串”,它包含以下两部分信息.
格式说明:由”%”和格式字符组成,如%d,%f,%c,他的作用是把输出数据转换为指定格式输出,格式的说明总是由”%”字符开始的.

普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如\n,\t。
2;输出列表
就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开.
一些特殊字符的输出:
单引号,双引号,和反斜杠的输出在前面加转义字符”\”
如:”\’” , “\”” , “\\”
%的输出用两个连在一起的%%,即printf(“%%”);

常用的格式说明如下:
格式字符
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀O)
x 以十六进制形式输出无符号整数(不输出前缀OX)
u 以十进制形式输出无符号整数
f 以小数形式输出单精度实数
lf以小数形式输出双精度实数
e 以指数形式输出单、双精度实数
g 以%f%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
这里强调一下:网上很多文章都说f 和lf是一样的,即不管单精度,双精度浮点数,都可以用f, 但我在POJ上做过测试,输出Double时用f确实也可以 ,但读入时,用f就报WA,所以大家如果对Double进行读写的话,都用lf吧。
说到Double,再啰嗦一句,建议大家要用到浮点数时都用Double,不要用float,因为在很多情况下,float精度不够会导致WA。
特殊:
对64位整数的输入输出,在POJ上的C++环境下(即VC),64位整数是:
__int64 (注意int前面是两个下划线)
输入输出格式为”%I64d”.
在G++环境下(即Dev C++) 64位整数是
long long
输入输出格式为”%lld”.

输出宽度
用十进制整数来表示输出的最少位数。 注意若实际位数多于定义的宽度,则按实际位数输出, 若实际位数少于定义的宽度则补以空格或0。
精度
精度格式符以“.”开头,后跟十进制整数。意义是:如果输出数字,则表示小数的位数;如果输出的是字符, 则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
标志格式字符
– 结果左对齐,右边填空格
+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号
例如:
double c=24212345.24232;
printf(“%020.4”); 表示输出精确到小数点后4位,输出占20位,若有空余的位补0.
scanf:
scanf的很多用法都是和printf对应的,故不再赘述。
说一下scanf一个特别好用的地方,就是可以滤去一些不想要的东西。
举例说明如下:
比如输入为日期 yyyy-mm-dd,就可以这样写:
int year,moth,day;
scanf(“%d-%d-%d”,&year,&moth,&day);
再比如:
scanf(“%3d %*3d %2d”,&m,&n); 输入113 118 69回车(系统将113赋予m,将69赋予n,因为*号表示跳过它相应的数据所以118不赋予任何变量)
puts()用的不多,且基本都能用printf()代替,故不再多说。
gets()是从输入流中获取一行字符串放入字符数组中:
char in[100];
gets(in);
大家可能最容易出错的地方就是字符串的输入,所以强调一下:
能进行字符,字符串输入的有:
getchar(), scanf(“%c”); scanf(“%s”), gets()
其中getchar() 和 scanf(“%c”)的功能是一样的。
需要注意的是,这两个函数读入的是输入流中当前位置的字符,
比如:
scanf(“%d”,&n);
c = getchar();
假设输入 67/ (假设“/”代表回车),则第一个scanf读入一个整数67后,当前输入流的位置是67之后,即指向回车符,所以第二个getchar()读入的就是一个回车符了,即 c = ‘\n’。
同样,gets()也是从当前位置读入一行字符串。
比如:
scanf(“%d”,&n);
gets(str);
此时读入字符数组中的字符串就是“\n” 了
所以通常在用scanf读入一个非字符串的类型之后,如果要读入字符,或字符数组,都用一个额外的getchar()把回车符读掉,若后面跟的不止一个回车符,可能还有多余的空格的话,就用gets()读掉。
和以上不同的是,scanf(“%s”) 读入的时候是会忽略掉空格,回车和制表符的。并且以空格,回车和制表符作为字符串结束的标志。
经常会有这样的题,输入第一行是一个整数,接下来每行的第一个是一个字符,用来表示某种操作,后面再跟一些数据,比如:
4
A 100 2
B 23
A 23 89
B 34
像这种输入就需要小心,读入字符时不要读成回车符。
为了防止意外,我一般是这样处理这类输入的:
char model[2];
Scanf(“%d”,&n);
for(…,…,…){
scanf(“%s”,model);
if(model[0] == ‘A’){
}
else{
}
}
sscanf():
sscanf()经常用来分解字符串,功能非常强大,但很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用法,大家如果想了解更多的话,自己去网上找吧。
1.
char str[100],str1[100],str2[100];
gets(str);
sscanf(str,”%s%s”,str1,str2);
将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。
2
取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf(“123456 “, “%4s”, str);

发表在 C++ | 留下评论

强制删除实体

Acad::ErrorStatus UnLockLayer(const AcDbObjectId layerId,bool& bLock,bool& bFrozen)
{
AcDbObject* pObj=NULL;
Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,layerId,AcDb::kForWrite);
if(es!=Acad::eOk)
{
return es;
}
if(!pObj->isKindOf(AcDbLayerTableRecord::desc()))
{
pObj->close();
return Acad::eNotThatKindOfClass;
}
AcDbLayerTableRecord *pLayerTableRecord=AcDbLayerTableRecord::cast(pObj);
if(pLayerTableRecord==NULL)
{
pObj->close();
return Acad::eNullHandle;
}
bLock=pLayerTableRecord->isLocked();
bFrozen=pLayerTableRecord->isFrozen();
es=pLayerTableRecord->upgradeOpen();
if(es!=eOk)
{
pObj->close();
return es;
}
pLayerTableRecord->setIsLocked(false);
pLayerTableRecord->setIsFrozen(false);
pObj->close();
return Acad::eOk;
}
Acad::ErrorStatus LockLayer(const AcDbObjectId layerId,bool& bLock,bool& bFrozen)
{
AcDbObject* pObj=NULL;
Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,layerId,AcDb::kForWrite);
if(es!=Acad::eOk)
{
return es;
}
if(!pObj->isKindOf(AcDbLayerTableRecord::desc()))
{
pObj->close();
return Acad::eNotThatKindOfClass;
}
AcDbLayerTableRecord *pLayerTableRecord=AcDbLayerTableRecord::cast(pObj);
if(pLayerTableRecord==NULL)
{
pObj->close();
return Acad::eNullHandle;
}
es=pLayerTableRecord->upgradeOpen();
if(es!=eOk)
{
pObj->close();
return es;
}
pLayerTableRecord->setIsLocked(bLock);
pLayerTableRecord->setIsFrozen(bFrozen);
pObj->close();
return Acad::eOk;
}
//强制删除实体
Acad::ErrorStatus ForceEraseEntity(const AcDbObjectId objId)
{
AcDbEntityPointer spEnt(objId,AcDb::kForRead);
Acad::ErrorStatus es=spEnt.openStatus();
if(es!=Acad::eOk)
{
return es;
}
es=spEnt->upgradeOpen();
if(es==Acad::eOk)
{
es=spEnt->erase();
return es;
}
else if(es==Acad::eOnLockedLayer)
{
bool bLock=false;
bool bFrozen=false;
es=UnLockLayer(spEnt->layerId(),bLock,bFrozen);
if(es!=Acad::eOk)
{
return es;
}
es=spEnt->upgradeOpen();
if(es!=Acad::eOk)
{
LockLayer(spEnt->layerId(),bLock,bFrozen);
return es;
}
es=spEnt->erase();
LockLayer(spEnt->layerId(),bLock,bFrozen);
return es;
}
else
{
return es;
}
}

发表在 ObjectArx | 一条评论

获取表格样式

AcDbObjectId GetTableStyleObjectId(CString strTableStyleName,AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase())
{
AcDbTableStyle *pTS = NULL;
AcDbDictionary *pNamedObj = NULL, *pNameList = NULL;
AcDbObjectId ObjectId;
Acad::ErrorStatus es;

es = pDb->getNamedObjectsDictionary(pNamedObj, AcDb::kForRead);
es = pNamedObj->getAt(_T(“acad_tablestyle”),(AcDbObject*&)pNameList, AcDb::kForRead);
if (pNamedObj)
pNamedObj->close();
es = pNameList->getAt(strTableStyleName, ObjectId);
if (pNameList)
pNameList->close();
return ObjectId;
}

发表在 ObjectArx | 留下评论

c++ 提升应用程序的权限

判断当前用户权限是否管理员权限

BOOL IsRunAsAdmin()
{
 BOOL fIsRunAsAdmin = FALSE;
 DWORD dwError = ERROR_SUCCESS;
 PSID pAdministratorsGroup = NULL;

 // Allocate and initialize a SID of the administrators group.
 SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
 if (!AllocateAndInitializeSid(
  &NtAuthority,
  2,
  SECURITY_BUILTIN_DOMAIN_RID,
  DOMAIN_ALIAS_RID_ADMINS,
  0, 0, 0, 0, 0, 0,
  &pAdministratorsGroup))
 {
  dwError = GetLastError();
  goto Cleanup;
 }

 // Determine whether the SID of administrators group is enabled in
 // the primary access token of the process.
 if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)){
  dwError = GetLastError();
  goto Cleanup;
 }

Cleanup:
 // Centralized cleanup for all allocated resources.
 if (pAdministratorsGroup){ 
  FreeSid(pAdministratorsGroup);
  pAdministratorsGroup = NULL;
 }

 // Throw the error if something failed in the function.
 if (ERROR_SUCCESS != dwError){ 
  throw dwError;
 }

 return fIsRunAsAdmin;
}

如果当前用户权限非管理员,提升当前用户权限

BOOL ElevateCurrentProcess(CString sCmdLine)
{
 USES_CONVERSION;
 TCHAR szPath[MAX_PATH] = {0};
 if (::GetModuleFileName(NULL, szPath, MAX_PATH)){
  // Launch itself as administrator.
  SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
  sei.lpVerb = _T(“runas”);
  sei.lpFile = szPath;
  sei.lpParameters = (LPCTSTR)sCmdLine;
  // sei.hwnd = hWnd;
  sei.nShow = SW_SHOWNORMAL;

  if (!ShellExecuteEx(&sei)){
   DWORD dwStatus = GetLastError();
   if (dwStatus == ERROR_CANCELLED) {
    return FALSE;
   }else if (dwStatus == ERROR_FILE_NOT_FOUND) {
    return FALSE;
   }
   return FALSE;
  } 
  return TRUE;
 }
 return FALSE;
}

发表在 C++ | 留下评论