ZRX开发手册

ZZR常见 RX见问X常问题题解解答答 说明:以下的问题解答针对ARX代码形式的ZRX程序同样有效:

[0001] 为什么使用了命令宏ZCED_ZRXCOMMAND_ENTRY_AUTO(appClassName, cmdGroupName, globCmd, locCmd, cmdflags, UIContext), 其中命令名“locCmd”这个命令在ZWCAD里不能识别?

解答:这个问题跟ZWCAD的命令名机制有关系,目前ZWCAD只能做到识别一个命令名globCmd, locCmd命令暂时还不支持, 诸多不便请谅解!

[0002] 为什么zcedPostCommandPrompt、zcedAddDropTarget,zcedRemoveDropTarge等全局函数在编译链接提示无法识别的外部函数?

解答:直接在调用该函数的cpp文件里Include \

[0003 ] 为什么 ZcDbDictionary::newIterator : function does not take 1 arguments ? **Code sample:

ZcDbDictionary *pGroupDict = NULL;

pDb->getGroupDictionary(pGroupDict,ZcDb::kForRead); ZcDbDictionaryIterator

解答:ZRX是以Object ARX 2008里的API类为基准,在Object ARX 2006 里的该函数AcDbDictionary::newIterator(AcRx::kDictCollated)带一个参数, 在Object ARX 2008 里不带参数。该问题在使用上不受影响。

[0004] 为什么我的工程在编译链接的时候,VC开发平台提示无法解析的外部符号\STR@_com_util@@YGPA_WPBD@Z) ?

解答: 这个问题可以通过改工程设置解决

ConfigurationProperties->C/C->LanguageTreatwchar_tasBuilt-inType=No 注意:#progma comment(lib, \

[0005] 为什么需要将ZRX的工程配置->C/C++->语言->将wchar_t视为内置类型改为“否”,或者将wchar_t视为内置类型有什么作用?

*pDictIter2

=

pGroupDict->newIterator(ZcRx::kDictCollated);// Complie error!

解答: 将wchar_t视为内置类型有什么作用?编译器可以对wchar_t做类型检查,否则wchar_t只是一个简单的typedef.CInPlaceEdit&operator=(constCInPlaceEdit&a){}你申明了返回类型,却没有在实现中提供返回值,是不对的。如果不希望这个函数被调用,可以不加{}

[0006] 为什么我的工程在编译链接时产生以下错误?

“*** error LNK2001: unresolved external symbol acrxGetApiVersion *** fatal error LNK1120: 1 unresolved externals

*** fatal error LNK1141: failure during build of exports file”

解答: 打开工程的.def文件, 直接将输出接口“acrxGetApiVersion”注释掉! 因

为ZRX目前没有提供对该接口的输出。

如: “EXPORTS

acrxEntryPoint

PRIVATE

;acrxGetApiVersion PRIVATE”

注意: 在ZRXSDK for ZWCAD 2010里该问题已经作了容错处理

[0007] ZRX在使用resbuf->resval.rstring时,在使用ads_relrb函数对resbuf进行内存释放时,引起死机问题?

解答: ZRX resbuf 在使用resbuf.resval.rstring时, 需要先分配一块内存空间,然后再通过

strcpy函数将值赋给resbuf.resval.rstring,这样就不会释放resbuf时引起死机问题。代码

示例如下:

[0008] 为什么使用了#include , 代码引用方式如std::map Var等,工程在编译链接时产生如下错误?

“error LNK2001: unresolved external symbol “__declspec(dllexport) public:__thiscall std::basic_string, calss std::allocator >……”

解答: 原因是工程在链接时找不到“msvcprtd.lib”库文件,在工程配置里里增加依赖库项“ msvcprtd.lib”即可。

struct resbuf* result; result = zds_newrb(RTSTR);

result->resval.rstring = new ACHAR[64]; strcpy(result->resval.rstring, \zds_relrb(result);

[0009] 在使用resbuf链表结构类型时,使用了malloc对字符串分配内存,在调用zcutRelRb释放时有内存报错?全局函数zcutRelRb实际调用的是MFC方式的delete进行内存释放,例如出错代码编写形式如下: Struct resbuf* pRb;

char strText[10] = “ZRXSDK”;

pRb = zcutNewRb(ZcDb::kDxfRegAppName);

pRb->resval.rstring = (char*)malloc(strlen(strText)+1); …

zcutRelRb(pRb); // 内存报错!

解答: 内存分配和释放不匹配造成,可以通过以下方式解决: 1) 在源文件的开始位置增加以下代码(如果工程不支持MFC): #define _AFXDLL #include

2)将malloc修改为new方式 Struct resbuf* pRb;

char strText[10] = “ZRXSDK”;

pRb = zcutNewRb(ZcDb::kDxfRegAppName);

//pRb->resval.rstring = (char*)malloc(strlen(strText)+1); pRb->resval.rstring = new char[(strlen(strText)+1)]; …

zcutRelRb(pRb); // 内存释放OK!

附附录A:录A:(ZRX现支持全局函数列举):

zcapLongTransactionManagerPtr zcdbAlloc zcdbAngToF zcdbAngToS zcdbDictAdd zcdbDictNext zcdbDictRemove zcdbDictRename zcdbDictSearch

zcdbDisplayPreviewFromDwg zcdbDisToF zcdbEcs2Ucs zcdbEcs2Wcs zcdbEntDel zcdbEntGet zcdbEntGetX zcdbEntLast zcdbEntMake zcdbEntMakeX zcdbEntMod zcdbEntNext zcdbEntUpd zcdbFree zcdbGetAdsName zcdbGetObjectId zcdbGetReservedString zcdbHandEnt zcdbInters

zcdbIsPersistentReactor zcdbNamedObjDict zcdbOpenzcdbEntity zcdbOpenzcdbObject zcdbOpenObject

zcdbPersistentReactorObjectId

联系客服:779662525#qq.com(#替换为@)