readarx.chm

《Tips and Techniques》

Incremented AutoCAD Registry Number

Ideally, a change of registry number should have no impact on your application's code, because this number should not be hard-coded anywhere. Instead, if your application needs to know the correct registry key at runtime, you should use the appropriate APIs. ObjectARX applications (in other words, those with an .arx extension) should use the AcDbHostApplicationServices::getUserProductRegistryRootKey() and

AcDbHostApplicationServices::getMachineProductRegistryRootKey() function or the acrxProductKey() global function. ObjectDBX modules (in other words, those with a .dbx extension) should use the acrxObjectDBXRegistryKey() global function to get the correct registry key. These functions always return the correct registry key for the host application's version.

AcDbBlockReference的继承类不能appendAttribute(),调用为引起错误eIllegalEntityType。故意设计成这样子的。

Ownership Hierarchies for Custom Objects

In the ownership hierarchies for your custom objects, be sure to call setOwnerId() to properly establish every object's owner backpointer. A future version of AutoCAD/ObjectDBX may cease writing objects with NULL owner IDs in incremental saves.

自定义对象要确保使用setOwnerId()方法……

Dimension Text and Defining Point Behavior

Dimension definition points and text position are all subject to the layout requirements of the dimension. With any of the following functions, the position passed in may be changed to fit within the layout needs of the dimension as determined by the dimension type and the current dimvar settings.

AcDbDimension::setTextPosition()
AcDbAlignedDimension::setDimLinePoint()
AcDbRotatedDimension::setDimLinePoint()
AcDb3PointAngularDimension::setArcPoint()
AcDb2LineAngularDimension::setArcPoint()

For example when DIMFIT = 3, for radial dimensions with the definition points such that the radial line is less than or equal to fifteen degrees from the X-axis, the text position's X coordinate can be set, but the Y coordinate will always be adjusted to locate the text along the radial line of the dimension.

木看懂。神马意思?

Freeing Strings Returned as Non-const Pointers

When calling methods that return non-const string pointers (for example, AcDbSymbolTable::getName(char&* pName)), you should free the memory occupied by the returned string.

对返回字符串指针的函数,要手动释放。

ObjectARX Does Not Support Multi-Threaded Programming

If you spawn multiple threads in your application, make sure that no more than one of the threads at a time invokes anything in the ObjectARX system.

不支持多线程

Do Not #define ACAD_OBJID_INLINE_INTERNAL

The header files acdb.h and dbidar.h contain an #ifdef section which selects a header to #include based on ACAD_OBJID_INLINE_INTERNAL. Applications should never #define this value. There are parallel headers for the lightweight ID types, some of which are for internal AutoCAD use only. Applications that attempt to #define ACAD_OBJID_INLINE_INTERNAL will not compile successfully.

取消定义宏ACAD_OBJID_INLINE_INTERNAL

Remove Selections Before Aborting Transactions

Certain interactions between transactions, the UNDO command, and the Object Property Toolbar (OPT) can put AutoCAD in an unstable condition. To avoid such situations, your ObjectARX application should always remove the pickfirst selection prior to aborting transactions, as shown here:

acedSSSetFirst(NULL, NULL);
actrTransactionManager->abortTransaction();
MFC PropertySheets with ObjectARX

Tabbed dialog boxes should use the base classes defined in the acui18.lib MFC extension DLL library. Do not use the MFC classes CPropertySheet and CPropertyPage. Use CAcUiTabMainDialog and CAcUiTabChildDialog instead. See the ObjectARX Developer's Guide and ObjectARX Reference for details.

Using __declspec(dllimport) on Class Definitions is Hazardous

Using the __declspec(dllimport) construct on a class exported to other applications can cause vtables to reside in all DLLs that instantiate that class. If any of these instantiating DLLs is unloaded, all instances created by that DLL become invalid. Subsequent attempts to access virtual functions on these invalid instances triggers a memory fault.

Consequently, the only safe way to use this directive with classes derived from AcDbObject, for example, is to mandate that no application that instantiates the class may be unloadable. To enforce this mandate, you must either document it clearly and visibly, or supply a pseudo-constructor that resides in a DLL or application that cannot be unloaded. The best policy is to avoid using this construct altogether.

The only exception to this warning applies if the class exports a static data member. In this case, you must use __declspec(dllimport) on that data member only, but you should avoid applying the construct to the entire class. Exporting static data members is not recommended.

This warning applies only to __declspec(dllimport). It does not apply to __declspec(dllexport).

The recommended usage is as follows:

#pragma warning( disable: 4275 4251 )
#ifdef POLYSAMP
#define DLLIMPEXP __declspec( dllexport )
#else
#define DLLIMPEXP
#endif // The "DLLIMPEXP" is only required for exporting a poly API or using
// the exported API. It is not necessary for any custom classes that
// are not exporting an API of their own.
//
class DLLIMPEXP AsdkPoly: public AcDbCurve
{
public:
ACRX_DECLARE_MEMBERS(AsdkPoly);
//*****************************************************************
// Constructors and destructor
//*****************************************************************
Standard C++ Headers and the _DEBUG Preprocessor Symbol

If you include any of the standard C++ headers while the _DEBUG preprocessor symbol is defined, then the debug C++ runtime is forced via pragmas. (Look at use_ansi.h in Visual C++.) You don't want to use the debug C++ runtime in an ObjectARX application.

To avoid this, apply the following workaround:

#ifdef _DEBUG
#undef _DEBUG
#endif

挺怪的,为什么我不想?

----update 2013/12/5---------

在官网提供的一个ppt里面看到的3张图解释了这个问题。

因为ARX申请的内存空间,交付给AutoCAD后,AutoCAD会在使用结束后调用delete来释放。

如果这些空间是申请在debug堆上,则会引起crash。

关于debug heap,可以参考下面2处的文章。

http://www.codeproject.com/Articles/6489/Debug-Tutorial-Part-3-The-Heap

http://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c9535/Inside-CRT-Debug-Heap-Management.htm

----------------------------------

Unnecessary Demand Loading Activity

AutoCAD may occasionally demand load an application that defines a class, even when there is no object of that class in the DWG or DXF file being loaded. If you observe this and wish to prevent the unnecessary demand loading of .dbx and .arx applications, simply save the drawing in either the DWG or DXF format and then reopen the file. This procedure can be done with or without the application available.

Use a complete open, followed by a full save, before reloading the file.

没看懂。Application到底是指arx还是dwg或dxf?

------------update 2013/12/6 ---------------

应该是指arx。

------------------------------------------------

AcGiGeometry::pline() Function Supports Proxy Graphics

In previous releases, the proxy graphics DWG data structure could not handle the complexity of the pline primitive. This limitation has been addressed as of AutoCAD 2004. As a result, the AcGiGeometry::pline() function now supports the proxy graphics context.

读文档readarx.chm的更多相关文章

  1. help文档制作 chm

    程序中的help文档制作 所用工具:HTML Help Workshop 文件包括:各个html文档,帮助页面的具体内容 hhc文档:help的目录文件 hhk文档:help的索引文件 MAP文件夹中 ...

  2. IDEA生成doc文档-生成chm文档

    首先,打开IDEA,并找到Tools -> Generate JavaDoc- 可供查询的chm比那些HTML页面好看多了. 如果您用过JDK API的chm文档,那么您一定不会拒绝接受其它第三 ...

  3. 通过jd2chm工具将html文档生存chm文档方法

    1.下载jd2chm.exe工具 2.下载后解压缩后先安装htmlhelp.exe 3.将jd2chm.exe文件拷贝到index.html所在文件夹中 4.打开命令行进入到index.html所在文 ...

  4. 关于python logging模块读文档的几个心得

    1. logger是分层级的,root是所有logger的祖先. 2. root这个logger在执行logging.warning() 等一系列方法和basicConfig()的时候才会被初始化ha ...

  5. Sandcastle方法生成c#.net帮助类帮助文档chm

    Sandcastle方法生成c#.net帮助类帮助文档即chm后缀的文档,其实是通过C#文档注释生成的XML文件来生成帮助文档的.因此,第一步就是生成XML文档, 步骤1生成XML文档 1.打开VS- ...

  6. c#帮助文档chm打不开的问题

    c# 帮助文档,chm 格式, 不可以放在含有字符 # 的文件夹下(包括当前文件夹和上级文件夹),文件名也不可以含有 # 字符, 否则会打不开.

  7. [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文

    序 用linux作为工作生产环境的几个需要解决的问题之一是:文档协作,即如何兼容Micro$oft Office格式的文档. 我一般的工作方式是:在linux下创建一个win7的虚拟机,安装常用的wi ...

  8. 较全的IT方面帮助文档

    http://www.shouce.ren/post/d/id/108632 XSLT参考手册-新.CHMhttp://www.shouce.ren/post/d/id/108633 XSL-FO参考 ...

  9. 转一篇:文档笔记之Django QuerySet

    这个放着,说不定以后作一些更深入的查询时,用得着的. http://www.rapospectre.com/blog/7/ 今天刚刚答完辩体完检就跑来更新博客了!!! 先补上第一篇: 一般情况下,我们 ...

随机推荐

  1. hdu 3518 (后缀数组)

    题目描述: 找出一个字符串中至少重复出现两次的字串的个数(重复出现时不能重叠). code: 后缀数组处理,对于得到height 进行查找...  参考http://blog.csdn.net/mis ...

  2. 如何替换掉.net toolStrip控件溢出按钮背景图

    在使用.net toolStrip控件的时候,  toolStrip里面的item宽度超过本身宽度时,会出现一个溢出按钮:OverflowButton,这个按钮是控件的一个属性,其实也是继承自Tool ...

  3. android动画的Interpolator

    1.Interpolator插值,控制一个动画变化过程中是线性匀速变化,还是加速变化,还是按照某种函数关系变化. 2.android提供的几种插值. 3.对上边提供的各个效果进行测试 (1)Accel ...

  4. JavaWeb chapter 2 Servlet

    1.  什么是Servlet: Servlet是运行于Web容器中,按照其自身规范编写的Java应用程序. Servlet是用Java语言编写的,它是一个Java类,因而Servlet遵守所有Java ...

  5. 在Ubuntu上安装JDK、Ant、Jmeter和Jenkins

    一.前期准备 1. 在win7下载VMware.Ubuntu(用迅雷下比较快) 2. 安装完VMware后新建虚拟机,选择iso: 3. 具体配置参考如下,至此Ubantu安装完成 二.在Ubuntu ...

  6. IT公司100题-tencent-打印所有高度为2的路径

    问题描述: 打印所有到叶子节点长度为2的路径  10  /  \ 6   16 / \   / \ 4 8  14 18   / \    / \    \ 2  5  12 15 20 / 11   ...

  7. 单例模式(Singleton Pattern)

    动机: 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设 ...

  8. web前端基础篇④

    1.BFC-块级元素-块级格式化上下文布局规则:独立区域,与外部毫不相关内部box会在垂直方向,一个个放置box垂直方向距离由margin决定BFC的区域不会与float box重叠计算BFC高度时, ...

  9. SharePoint 2013 开发——其他社交功能

    博客地址:http://blog.csdn.net/FoxDave 上一篇讲了如何获取用户配置文件的相关属性,它属于SharePoint 2013社交功能的一个小的构成部分.社交功能是SharePoi ...

  10. Spring框架学习(二)

    一.依赖注入的三种注入方式 Spring框架为我们提供了三种注入方式:set注入.构造方法注入和接口注入. 1.set注入 规律:无论给什么赋值,配置文件中<property>标签的nam ...