//感谢高飞鸟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函数、源码的一种方式的更多相关文章

  1. 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)

    文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...

  2. 2款不同样式的CSS3 Loading加载动画 附源码

    原文:2款不同样式的CSS3 Loading加载动画 附源码 我们经常看到的Loading加载很多都是转圈圈的那种,今天我们来换一种有创意的CSS3 Loading加载动画,一种是声波形状的动画,另一 ...

  3. Mybatis 懒加载使用及源码分析

    Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...

  4. github下载源码的三种方式

      从github上下载源码的三种方式 CreationTime--2018年6月7日15点21分 Author:Marydon 1.情景展示 2.实现方式 方式一:直接点击"Downloa ...

  5. 别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】

    目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.C ...

  6. cesium 入门开发系列矢量瓦片加载展示(附源码下载)

    前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 源代 ...

  7. Servlet在启动时加载的tomcat源码(原创)

    tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...

  8. jetty加载spring-context容器源码分析

    带着疑问开始 web.xml的顺序问题 先拿一个最简单的spring mvc web.xml来说问题,如下图:如果我将三者的顺序倒置或是乱置,会产生什么结果呢? 启动报错?还是加载未知结果?还是毫无影 ...

  9. 美团、点评、猫眼App下拉加载效果的源码分享

    今天我准备拿大众点评.美团.猫眼电影三款App的实例来分享一下APICloud下拉加载这个模块的效果. 美团App下拉加载效果   以美团中的下拉酷似动画的萌萌着小人儿效果作为参考,来实现的一个加载模 ...

随机推荐

  1. iss 默认上传大小为30 M

    在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.指 ...

  2. 求Half向量

    [求Half向量] 给定入射向量与视角向量.把入射向量与视角向量相加即可,如下: 前提是 lightDir.ViewDir 都是单位向量.

  3. GetHashCode()

    [GetHashCode] GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值.而且,.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不 ...

  4. 使用cloudrea manager管理已有的cdh集群(转)

    转自:http://blog.51cto.com/teacheryan/1912116 本文介绍如何搭建cloudera manager去接入已有hadoop组件(cdh). 一.下载必备文件: 1. ...

  5. node-mysql中防止SQL注入

    备注: 本文针对mysqljs/mysql. 为了防止SQL注入,可以将SQL中传入参数进行编码,而不是直接进行字符串拼接.在node-mysql中,防止SQL注入的常用方法有以下四种: 方法一:使用 ...

  6. react-native init安装指定版本的react-native

    C:\Users\ZHONGZHENHUA\imooc_gp\index.js index.js /** @format */ import React,{ Component } from 'rea ...

  7. 01 lucene基础 北风网项目培训 Lucene实践课程 Lucene概述

    lucene-core-2.4.1.jar是lucene开发的核心jar包,lucene-analyzers-2.4.1.jar也是必不可少的.lucene-highlighter-2.4.1.jar ...

  8. Linux 下启动两个tomcat

    Linux 下启动两个tomcat 闲来无事学习nginx,想要配置个load balance.可是先决条件是:得有两个web容器.两个电脑是不用想了.只能想办法在一个机器上启动两个tomcat.原以 ...

  9. socket,TCP/IP的理解(转)

    TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...

  10. c++对象模型是什么,对象的内存布局和结构问题

    在c++发明的初期对于c++对象模型的争论从来没有停止过直到标准委员会通过了最终的c++对象模型这件事情才变得尘埃落定.C++对象模型可能是最不需要去解释的,但是又是不得不去说的因为c++的入门最先接 ...