objectARX加载lisp函数、源码的一种方式
//感谢高飞鸟highflybird版主的思路以及研究。
//先声明非公开函数acedEvaluateLisp extern int acedEvaluateLisp(const ACHAR*,struct resbuf *&);
//直接使用源码的方式
struct resbuf *rbOut=NULL;
int nRet= acedEvaluateLisp(_T("(defun sk_myline(/ ent)(setq ent(entmakex (list (cons 0 \"line\")(list 10 0 0 0)(list 11 100 100 0)))) ent)(sk_myline)"),rbOut);
if (nRet == TRUE)
{
if (rbOut->restype == RTENAME)
{
AcDbObjectId objId=AcDbObjectId::kNull;
acdbGetObjectId(objId,rbOut->resval.rlname);
if (objId != AcDbObjectId::kNull)
{
AcDbEntity *pEnt=NULL;
acdbOpenObject(pEnt,objId,AcDb::kForWrite);
if (pEnt!=NULL)
{
pEnt->setColorIndex();
pEnt->close();
}
}
}
}
if (rbOut!=NULL)
{
acutRelRb(rbOut);
}
//添加lisp文件为资源文件的方式
导入lisp为自定义资源
资源类型随意
下面是加载的代码
static bool IsTextUTF8(const char* str,int length)
{
;//UFT8可用1-6个字节编码,ASCII用一个字节
unsigned char chr;
bool bAllAscii=true; //如果全部都是ASCII, 说明不是UTF-8
; i<length; ++i)
{
chr= *(str+i);
) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx
bAllAscii= false;
) //如果不是ASCII码,应该是多字节符,计算字节数
{
if(chr>=0x80)
{
if(chr>=0xFC&&chr<=0xFD)
nBytes=;
else if(chr>=0xF8)
nBytes=;
else if(chr>=0xF0)
nBytes=;
else if(chr>=0xE0)
nBytes=;
else if(chr>=0xC0)
nBytes=;
else
return false;
nBytes--;
}
}
else //多字节符的非首字节,应为 10xxxxxx
{
if( (chr&0xC0) != 0x80 )
return false;
nBytes--;
}
}
) //违返规则
return false;
if( bAllAscii ) //如果全部都是ASCII, 说明不是UTF-8
return false;
return true;
}
static CString UTF82WCS(const char* szU8)
{
bool bIsUtf8=IsTextUTF8(szU8,strlen(szU8));
//预转换,得到所需空间的大小;
);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = ];
//转换
::MultiByteToWideChar(bIsUtf8 ? CP_UTF8 : CP_ACP, bIsUtf8 ? NULL:MB_PRECOMPOSED, szU8, strlen(szU8), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
CString unicodeString(wszString);
delete[] wszString;
wszString = NULL;
return unicodeString;
}
// - sk_ArxTestCode20181101.mylispload command (do not rename)
static void sk_ArxTestCode20181101mylispload(void)
{
// Add your code for command sk_ArxTestCode20181101.mylispload here
HRSRC hResource = ::FindResource(_hdllInstance, MAKEINTRESOURCE(IDR_TXT3), _T("TXT"));
if (!hResource)
return ;
DWORD imageSize = ::SizeofResource(_hdllInstance, hResource);
if (!imageSize)
return ;
const void* pResourceData = ::LockResource(::LoadResource(_hdllInstance, hResource));
if (!pResourceData)
return ;
// CStringA szGetLispString=(BYTE*)pResourceData;
// CString szGetLispStringW;
// szGetLispStringW=szGetLispString;
CString szGetLispStringW=UTF82WCS((const char*)pResourceData);
struct resbuf *rbOut=NULL;
//ads_queueexpr(szGetLispStringW);
int nRet= acedEvaluateLisp(szGetLispStringW,rbOut);
}
添加virtual AcRx::AppRetCode On_kLoadDwgMsg (void *pkt)消息,让每个文档都加载一次,包括以后新建的文档。
virtual AcRx::AppRetCode On_kLoadDwgMsg (void *pkt) {
AcRx::AppRetCode retCode =AcRxArxApp::On_kLoadDwgMsg (pkt) ;
sk_ArxTestCode20181101mylispload();
return (retCode) ;
}
objectARX加载lisp函数、源码的一种方式的更多相关文章
- 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)
文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...
- 2款不同样式的CSS3 Loading加载动画 附源码
原文:2款不同样式的CSS3 Loading加载动画 附源码 我们经常看到的Loading加载很多都是转圈圈的那种,今天我们来换一种有创意的CSS3 Loading加载动画,一种是声波形状的动画,另一 ...
- Mybatis 懒加载使用及源码分析
Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...
- github下载源码的三种方式
从github上下载源码的三种方式 CreationTime--2018年6月7日15点21分 Author:Marydon 1.情景展示 2.实现方式 方式一:直接点击"Downloa ...
- 别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】
目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.C ...
- cesium 入门开发系列矢量瓦片加载展示(附源码下载)
前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 源代 ...
- Servlet在启动时加载的tomcat源码(原创)
tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...
- jetty加载spring-context容器源码分析
带着疑问开始 web.xml的顺序问题 先拿一个最简单的spring mvc web.xml来说问题,如下图:如果我将三者的顺序倒置或是乱置,会产生什么结果呢? 启动报错?还是加载未知结果?还是毫无影 ...
- 美团、点评、猫眼App下拉加载效果的源码分享
今天我准备拿大众点评.美团.猫眼电影三款App的实例来分享一下APICloud下拉加载这个模块的效果. 美团App下拉加载效果 以美团中的下拉酷似动画的萌萌着小人儿效果作为参考,来实现的一个加载模 ...
随机推荐
- 【jdbc】【c3p0】c3p0三种配置方式【整理】
c3p0三种配置方式 c3p0的配置方式分为三种,分别是1.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文件3.类路径下提供一个c3p0-config.xml ...
- 【LA2957 训练指南】运送超级计算机【二分,最大流】
题意: 宇宙中有n个星球,你的任务是用最短的时间把k个超级计算机从星球S运送到星球T.每个超级计算机需要一整艘飞船来运输.行星之间有m条双向隧道,每条隧道需要一整天的时间来通过,且不能有两艘飞船同时使 ...
- [hdu1823]Luck and Love(二维线段树)
解题关键:二维线段树模板题(单点修改.查询max) #include<cstdio> #include<cstring> #include<algorithm> # ...
- unity自带寻路Navmesh入门教程
http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ http://liweizhaolili.blog.163 ...
- 由Strurts2漏洞引开谈谈web代码安全问题
漏洞与补丁齐飞,蓝屏共死机一色. 最近struts2的安全漏洞影响面甚广,此后门为可以在url中直接远程调用脚本的漏洞和一个重定向漏洞.大家可以在s2-016远程执行脚本漏洞和s2-017重定向开放漏 ...
- 导入txt文件到SQL SERVER 2008
最近在学习数据库,想要试处理大量数据.大量的数据手动输入是不可能的了,所以需要导入.本人上网看了不少的教程,然后下载了txt格式的一万条彩票开奖记录数据.但是把这些数据导入到SQL Server 20 ...
- hash+链表
简单的hash就是用数组加链表的组合来实现,这种hash很简单,但hash的思想在那. #ifndef _HASH_H_ #define _HASH_H_ typedef struct _ListNo ...
- line1: 1: Syntax error: word unexpected (expecting ")")
行时错误:line1: 1: Syntax error: word unexpected (expecting ")") 查看Makefile编译规则,可能由于依赖关系造成编译器使 ...
- Excel分类汇总与数据有效性
分类汇总就是把一些数据按照一个标准进行分类,然后按照相应的汇总方式进行汇总. 使用分类汇总之前先排序,否则汇总会出现很多类. 看如上这个表,如果按照所属区域分类,然后按照金额的总和汇总,在汇总之前就要 ...
- 全面剖析Smarty缓存机制二[清除缓存方法]
前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关 ...