ObjectARX 常见编译错误解决方式记录

C1189 Winver 0x501 fatal error C1189: #error: MFC does not support WINVER less than 0x0501.

方式一&方式二

注释掉后,vs会自动从WinSDKVer.h头文件获取
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)

C1189 RTCc fatal error C1189: #error: /RTCc rejects conformant code

方式一

增加预处理定义 _ALLOW_RTCc_IN_STL

方式二

define _ALLOW_RTCc_IN_STL

方式三

修改代码生成中的较小类型检查/RTCc 为否

C2220 警告被视为错误 error C2220: 警告被视为错误 - 没有生成“object”文件

方式一

修改警告的错误,保证不出现这个警告 ,例如这个int类型改为UINT类型

方式二

修改属性页,修改c/c++->常规->警告视为错误 改为否

方式三

禁用出现的这个警告编号 (disable:4838),这样就不会出现警告提示

LNK2001 无法解析的外部符号"void *_cdecl acHeapAlloc(void *,unsigned _int64)" (?acHeapAlloc@@YAPEAXPEAX_K@Z)

解答 by gz_xl 缺少库

#if _MSC_VER >= 1920   // ObjectARXSDK 2021以上
#pragma comment(lib, "AcPal.lib")
#pragma comment(lib, "acgeoment.lib")
#endif

error LNK2019: 无法解析的外部符号 public: static enum Acad::ErrorStatus __cdecl AcDbRegion::createFromCurves...

解答 by gz_xl ARX2021以及以上版本创建面域缺少库

#if _MSC_VER >= 1920   // ObjectARXSDK 2021以上
#pragma comment(lib, "acgeoment.lib")
#endif

error LNK2019: 无法解析的外部符号 "long __cdecl acdbSetDbmod(class AcDbDatabase *,int)"

解答 by gz_xl 2017开始版本long变更int

//兼容性写法,高低版本都可以
extern Adesk::Int32 acdbSetDbmod(AcDbDatabase* pDb, Adesk::Int32 newVal);

LNK111 模块计算机类型"x64"与目标计算机类型“X86"冲突 或 模块计算机类型"X86"与目标计算机类型“x64"冲突

解答

“模块计算机类型”一般指的是调用已经编译好的lib库文件的是x64, 
而 “目标计算机类型“X86” 是指的当前编译设置的编译平台是win32(x86),
当引用的lib文件和当前平台不匹配的时候,就会提示这个问题。
设置好正确的lib即可。在arx中一般是库目录的问题,确保库目录正确。

error C2664: “int acedSSLength(const int64_t [],Adesk::Int32 *)”: 无法将参数 2 从“long *”转换为“Adesk::Int32 *”

解答

//在高版本中获取选择集的数量参数类型从 long 变更为 Adesk::Int32,修改变量类型或者强制转换
Adesk::Int32 len;
acedSSLength(ss,&len);
或者是 
long len;
acedSSLength(ss,(Adesk::Int32*)&len);
posted @ 2020-03-17 20:08  edata  阅读(2303)  评论(0编辑  收藏  举报