明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1356|回复: 11

-ARX->ObjectARX支持C++14的淫技

[复制链接]
发表于 2022-12-20 10:23 | 显示全部楼层 |阅读模式
本帖最后由 东升铮 于 2022-12-20 13:02 编辑

前言:
        作为一个从auto lisp转到Objectarx二开的新鸟,就像来到了一个新天地,这里阳光明媚,鸟语花香...让我一度不禁感慨:“哇! 哇哇!这个还能这样做,哇!这个原来是这样的呀,不错不错”
在学习的途中历尽心酸坎坷;依稀记得第一次通过向导创建了一个Hello World...就能让我高兴半天,高兴完之后就会陷入沉思;

       ObjectARX他必须对应主程序编译器版本进行开发,VC8的代码(C++98)可以拿到VC14上编译; 重点来了,我要是想要进行一些操作时:比如"constexpr","auto"等新标准特性时,这些操作在VC8等旧标准下是不允许
也许这个原因劝退了很多人....放弃么?开什么玩笑...我可是非洲平头仔呀。
思考:
      在我思考怎么解决这个难题时,我脑海里突然冒出一个想法:“既然Objectarx编译后是一个动态链接库、那我能不能用VS2019编译一个DLL去让他调用?” 有了想法我开始实践、
我开始测试以VC8编译的控制台去调用以VC14编译的动态库,结果是可行的。我决定移植至VC8编译的ARX去调用那个库试试,在这个时候他提示失败:"找不到所需的动态链接库";
我开始犯难,在我添加路径至搜索路径后,结果也是可行的。大致运行流程如下图:
                                                     
     又又重点来了、我要是想在动态库里面输出一个“Hello World...”怎么办?库里也没有acutPrintf这个函数啊?放心...你别忘了Objectarx是个动态链接库哦!!!咱把acutPrintf这个函数导出给DLL调用输出字符串
这时候你是不是觉得逻辑就有点复杂了...这个叼毛说的什么啊?什么ARX调用DLL、然后DLL又调用ARX啊?其实一点不复杂!大致如下图:
                                                     
Demo文件如下:



    优点:
          一、:可以支持新标准特性、比如你想在编译时隐藏一个字符串....
          二、:用新标准编写重复的代码、避免旧标准不存在的特性、标准库而费头脑



                                                      




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 3明经币 +3 金钱 +30 收起 理由
dtucad + 1 很给力!
highflybird + 1 + 30 赞一个!
1028695446 + 1 很给力!

查看全部评分

发表于 2023-1-13 18:50 来自手机 | 显示全部楼层
跨版本dll调用 不推荐。stl标准模板类型vector array stack等大概率出问题。int char void或许凑巧能用但极不推荐 没稳定性可言
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-12-21 14:55 来自手机 | 显示全部楼层
gdfyhao 发表于 2022-12-21 09:03
看懂了开头,后面就看不懂了

有Demo的,实在看不懂再问我也行
发表于 2022-12-20 11:18 | 显示全部楼层
现在看不懂,留在将来看
发表于 2022-12-20 11:33 | 显示全部楼层
有个示例工程就好了,现在完全没懂
 楼主| 发表于 2022-12-20 12:43 | 显示全部楼层
革天明 发表于 2022-12-20 11:33
有个示例工程就好了,现在完全没懂

已上传附件
 楼主| 发表于 2022-12-20 12:45 | 显示全部楼层
caoliu023 发表于 2022-12-20 11:18
现在看不懂,留在将来看

我承认这样玩容易绕不过来
发表于 2022-12-20 20:38 | 显示全部楼层
谢谢楼主分享
发表于 2022-12-21 09:03 | 显示全部楼层
看懂了开头,后面就看不懂了
发表于 2022-12-21 09:08 | 显示全部楼层
习惯了增加条件编译(增加C++98语法)
 楼主| 发表于 2022-12-21 14:56 来自手机 | 显示全部楼层
gzxl 发表于 2022-12-21 09:08
习惯了增加条件编译(增加C++98语法)

这也是一种方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 08:58 , Processed in 0.303491 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表