赞
踩
环境与开发库
ObjectArx
CGAL-3.7
boost_1_61_0
Xtreme ToolkitPro v15
ArcGIS10.2
#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG)
# pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors")
# pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes")
# error "Incompatible build options"
#endif
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页”对话框。
单击“C/C++”文件夹。
单击“代码生成”属性页。
修改下列属性之一或两者都修改:“基本运行时检查”或“较小类型检查”
报错信息:
error C2440: “static_cast”: 无法从“void (__cdecl CGridCtrl::* )(UINT)”转换为“void (__cdecl CWnd::* )(UINT_PTR)”
error C2664: “SetTimer”: 不能将参数 4 从“void (__cdecl *)(HWND,UINT,UINT,DWORD)”转换为“TIMERPROC”
解决:
#ifdef _WIN64
void CALLBACK OnTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
#else
void CALLBACK OnTimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
#endif
#ifdef _WIN64
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg LRESULT OnChangePrjProp(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnChangeSelectEnt(WPARAM wParam, LPARAM lParam);
LRESULT OnParentClose(WPARAM wParam, LPARAM lParam);
#else
afx_msg void OnTimer(UINT nIDEvent);
afx_msg long OnChangePrjProp(WPARAM wParam, LPARAM lParam);
afx_msg long OnChangeSelectEnt(WPARAM wParam, LPARAM lParam);
long OnParentClose(WPARAM wParam, LPARAM lParam);
#endif
使用源码重新生成lib文件,或者把现有的CGAL-vc100-mt.lib直接改名试试
1 查找外部符号头文件是否已经#include
2 找出所属lib看看是否已经被导入
3 查看lib源码看看方法是否已经导出
4 查看外部符号是否在本项目内,已经被包含进工程里面
闭合多段线与射线使用intersectWith 会取出来两个交点,发生的问题是CAD精度导致,有两个解决方法:
1 是取出交点后,重新用getClosestPointTo判断交点是否在实体上。
2 把实体移动到原地附近再做处理
错误描述: acax17enu.tlh(613) : error C2371: 'LONG_PTR' : redefinition; different basic types see declaration of 'LONG_PTR'
解决:
#import "acax17enu.tlb" raw_interfaces_only no_namespace // VS2005 - VC8、CAD2007
改为
#import "acax18enu.tlb" raw_interfaces_only no_namespace // VS2005 - VC8、CAD2007
在CAD使用ADO的方式输出Excel,会存在版本不匹配的问题。例如:CAD 2008中调用Office 2010 x64,会在Open函数中直接跳出异常。可以考虑使用COM的方式,未实测。
_ConnectionPtr exclConn;
CString connStr;
exclConn.CreateInstance(__uuidof(Connection));
connStr.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=0\""),pFile);
exclConn->Open(connStr.GetBuffer(),_T(""),_T(""),adModeUnknown);
一般是引用了高版本编译器生成的LIB导致
1 升级当前编译器版本,例如安装SP1
2 用当前版本编译器重新编译LIB
could be afxmt.h(150) : CCriticalSection' or atlsync.h(31) : ATL::CCriticalSection'
解决:在使用到CCriticalSection的地方,加入以下这段
#include <afxmt.h>
typedef CCriticalSection AfxmtCriticalSection;
typedef CEvent AfxmtEvent;
#include <atlsync.h>
try
{
m_pRecordset->State&adStateOpen;
m_pRecordset->AddNew();
m_pRecordset->PutCollect("old",_variant_t((long)28);
……
m_pRecordset->GetFields()->GetItem("data")->AppendChunk(varBLOB);
m_pRecordset->Update(); //语句A ,这很重要 就是因为没有Update导致 Close报错
}
catch (_com_error e)
{
m_pRecordset->Close(); //语句B
……
}
解决方法转自 https://blog.csdn.net/godoooo/article/details/84591520
Win + R运行命令:regedit ; 在弹出的注册表编辑器中找到如下选项:
HKEY_CLASSES_ROOT\TypeLib{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5
右边会显示选择的项的信息,右键 --> 删除多余的即可。
原因,本身机器Win7 64位系统安装的是x86的office2010,卸载后,陆续装了WPS,与office2010精简版,导致了开发环境出现各种问题,首先我4个版本的VS05,08,10,13的许可都被清空掉了,10跟13可以重新注册,05和08经过修复,重装都一直报各种错误,最后使用Windows install Clean Up 把05跟08的组件都卸载掉才重新安装成功,编译以前正常的代码缺又出现上面的错误。查了很久才确定是TypeLib的注册表被修改过,通过 Microsoft Office 14.0 Object Library关键字搜到了HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}这个注册表,然后仿照Office07的内容重新注册,内容如下
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5]
@="Microsoft Office 14.0 Object Library"
"PrimaryInteropAssemblyName"="Office, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"
[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5\0]
[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5\0\win32]
@="C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL"
[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.5\FLAGS]
@="0"
至此,问题解决。
解决方法:需要给vs2008打个sp1的补丁
问题:fatal error C1083: 无法打开包括文件:“AcTc_i.h”: No such file or directory
解决方法:没有包含ObjectARX 2010\inc-win32目录
解决方法:替换VC2008 安装目录的 include文件夹
ATL_Server_Source_and_Headers_9_0_70425_Alpha.zip 解压到
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc
解决方法:
CAcModuleResourceOverride res; //(添加此行)
AcAxDocLock lock;
acedGetAcadFrame()->SetFocus();//切换焦点
DlgSplitZD dlg;
dlg.DoModal();
将Microsoft Visual Studio 10.0\VC\bin中的cvtres.exe直接删除或改名。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。