EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 9389|回复: 177
打印 上一主题 下一主题

[混合编程] .NET C++ 混合编程

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 16:32:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1. <ul type="1" class="litype_1"><li></li><li>using namespace System;</li><li>using namespace System::Windows::Forms;</li><li>using namespace Autodesk::AutoCAD::Runtime;</li><li>using namespace Autodesk::AutoCAD::ApplicationServices;</li><li></li><li>//本地代码部分,该部分编译以后不能通过反编译</li><li>#pragma unmanaged</li><li>int Add(int a,int b)</li><li>{</li><li>return a+b;</li><li>}</li><li>//托管代码部分,该本分可以通过反编译</li><li>#pragma managed</li><li>namespace ObjectArxTest</li><li>{</li><li>void CommandClass::MyCommd()</li><li>{</li><li>doit(4,6);</li><li>}</li><li>void CommandClass::doit(int a,int b)</li><li>{</li><li>if (Add(a,b)==10)</li><li>{</li><li>MessageBox::Show("测试成功!");</li><li>}</li><li>}</li><li>}
    2. </li></ul>

    复制代码

Net中的编译文件容易被各种工具反汇编,原代码得不到保护,更容易被破解,一直是Net应用中的一个软肋。就我应用中摸索的一点体会,提供给大家分享。
在Net中,只有C++.net可以实现混编,其他语言则无能为力。
实现混编以后,在最终生成的托管代码中,可以嵌入X86本地代码,这样,即使被人反编译,本地代码部分也是看不到的,实现了关键算法的保密,可以隐藏了程序代码中的敏感部分,是喜欢Net编程人员自我保护的可选方案!我也是初步探索,希望同行们多多研究,互相交流。
首先,你需要了解C++建立Net程序的基础知识,能建立一个简单的ObjectARX项目,这个SDK中自带的向导不支持,需要你手工建立。其实很简单,在VS2005中,新建-项目-C+++-CLR-类库,然后点完成就可以了。
其次,你要添加对SDK中Net类库的引用,在项目属性中,选择 通用属性-应用,点击添加新引用,然后加入必须的那两个文件,复制本地属性分别设置为false。
最后就是添加代码了:
例如我建立项目的时候,项目名称定义为:ObjectArxTest
那么在ObjectArxTest.h中添加代码:

  1. <font color="rgb(102, 102, 102)"><font><ul type="1" class="litype_1"><li></li><li></li><li>using namespace System;</li><li>using namespace System::Windows::Forms;</li><li>using namespace Autodesk::AutoCAD::Runtime;</li><li>using namespace Autodesk::AutoCAD::ApplicationServices;</li><li>namespace ObjectArxTest</li><li>{</li><li>public ref class CommandClass</li><li>{</li><li>public:</li><li>[CommandMethod("test")]</li><li>static void MyCommd();</li><li>static void doit(int a,int b);</li><li>};</li><li>}
  2. </li></ul><div>
  3. </div>
  4. </font></font>
  5. <font>在ObjectArxTest.cpp中添加下面代码</font>
  6. <font color="rgb(102, 102, 102)"><font><ul type="1" class="litype_1"><li></li><li></li><li>using namespace System;</li><li>using namespace System::Windows::Forms;</li><li>using namespace Autodesk::AutoCAD::Runtime;</li><li>using namespace Autodesk::AutoCAD::ApplicationServices;</li><li></li><li>//本地代码部分,该部分编译以后不能通过反编译</li><li>#pragma unmanaged</li><li>int Add(int a,int b)</li><li>{</li><li>return a+b;</li><li>}</li><li>//托管代码部分,该本分可以通过反编译</li><li>#pragma managed</li><li>namespace ObjectArxTest</li><li>{</li><li>void CommandClass::MyCommd()</li><li>{</li><li>doit(4,6);</li><li>}</li><li>void CommandClass::doit(int a,int b)</li><li>{</li><li>if (Add(a,b)==10)</li><li>{</li><li>MessageBox::Show("测试成功!");</li><li>}</li><li>}</li><li>}
  7. </li></ul>
  8. <i>复制代码</i></font></font>
复制代码

现在可以编译了,用netload命令加载入CAD2008以后,运行命令test,是不是弹出来一个对话框?成功了!
其中代码中#pragma unmanaged与#pragma managed可以写入自己要防止反编译的函数,在后面的命名空间中可以直接调用,但编译以后这部分代码是受保护的。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
推荐
发表于 2017-5-23 10:24:29 | 只看该作者
只想充实在知识的海洋
推荐
发表于 2017-7-13 10:53:37 | 只看该作者
赞赞赞赞赞赞赞赞赞
推荐
发表于 2017-4-12 09:58:02 | 只看该作者
有助于大家交流

4

主题

764

帖子

1270

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1270
9F
发表于 2014-3-14 11:26:10 | 只看该作者
路过!!!
不发表意见……

6

主题

908

帖子

1312

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1312
12F
发表于 2014-5-22 15:41:52 | 只看该作者
(*^__^*) 嘻嘻……

5

主题

884

帖子

1541

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1541
14F
发表于 2014-6-9 15:56:11 | 只看该作者
顶......
楼下跟上.....

10

主题

918

帖子

1471

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1471
17F
发表于 2014-6-13 14:17:33 | 只看该作者
顶......
楼下跟上.....
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-23 10:50

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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