东升铮 发表于 2022-12-20 10:23:05

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

本帖最后由 东升铮 于 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文件如下:



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


                                                      




landsat99 发表于 2023-1-13 18:50:23

跨版本dll调用 不推荐。stl标准模板类型vector array stack等大概率出问题。int char void或许凑巧能用但极不推荐 没稳定性可言

东升铮 发表于 2022-12-21 14:55:35

gdfyhao 发表于 2022-12-21 09:03
看懂了开头,后面就看不懂了

有Demo的,实在看不懂再问我也行

caoliu023 发表于 2022-12-20 11:18:01

现在看不懂,留在将来看

革天明 发表于 2022-12-20 11:33:21

有个示例工程就好了,现在完全没懂

东升铮 发表于 2022-12-20 12:43:12

革天明 发表于 2022-12-20 11:33
有个示例工程就好了,现在完全没懂

已上传附件

东升铮 发表于 2022-12-20 12:45:07

caoliu023 发表于 2022-12-20 11:18
现在看不懂,留在将来看

:lol我承认这样玩容易绕不过来

中国梦 发表于 2022-12-20 20:38:48

谢谢楼主分享

gdfyhao 发表于 2022-12-21 09:03:20

看懂了开头,后面就看不懂了

gzxl 发表于 2022-12-21 09:08:51

习惯了增加条件编译(增加C++98语法)

东升铮 发表于 2022-12-21 14:56:44

gzxl 发表于 2022-12-21 09:08
习惯了增加条件编译(增加C++98语法)

这也是一种方法
页: [1] 2
查看完整版本: -ARX->ObjectARX支持C++14的淫技