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. Security » Authorization » 要求处理器中的依赖注入

    Dependency Injection in requirement handlers¶ 30 of 32 people found this helpful Authorization handl ...

  2. python3 字典相关函数

    python版本3.5 #Author by Liguangbo#_*_ coding:utf-8 _*_'''info={'No.1':'ligb','No.2':'donglx','No.3':' ...

  3. Node.js 快速了解

    最近在学习目前非常火的Node.js 写了一份精简易懂的笔记用于快速了解Node.js技术.如有不对的地方还请多多指教. 注:此篇博文不断更新中. 第一部分:快速了解 1.Node.js是什么? No ...

  4. Nexus私服忘记用户名密码,Nexus私服如何找回用户名密码

    Maven搭建私服用Nexus很方便.但是如果忘记了管理员的密码,如何处理呢?Nexus私服如何找回用户名密码? 1. 找到nexus-XXXYYYY-bundle/sonatype-work/nex ...

  5. NET中的规范标准注释(二) -- 创建帮助文档入门篇

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...

  6. 微信公众平台如何获取用户的OpenID(一)

    如何获取用户的OpenID,对于微信开发模式下的开发来说,那就是一个非常简单的小功能了.简单介绍一下我是怎样去获取OpenID的. 微信服务器与公众账号服务器交互的信息可以分为3类:请求消息.事件和响 ...

  7. JavaWeb Chapter 7 监听器

    1.  监听器Session.request.context对象属性的变化: 2.  三个对象都有生命周期和属性改变的监听: 3.  Session另外还有会话迁移和对象绑定的监听: 4.  Sess ...

  8. PHP批量删除做法

    1.批量删除主页 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  9. net 的单元测试 初学

    1. 都要以一个方法 这样的去测试 2. 利用工具 Install-Package Moq -Version 4.0 (最高的是4.5  4.0适用于自己项目的版本)   Moq.dll 进行测试   ...

  10. android 分享或者调用系统或者其他app时 应注意! startActivityForResult() 使用

    //判断是否有相应的Activity来接受intentPackageManager packageManager = getPackageManager();List<ResolveInfo&g ...