首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从非托管代码执行托管代码?

如何从非托管代码执行托管代码?
EN

Stack Overflow用户
提问于 2012-02-12 09:32:32
回答 2查看 1.9K关注 0票数 4

,就在那里!,你可能认为这已经被问了几百万次了,被回答的次数和地球绕太阳旋转的次数一样多,但是请在这个问题上和我一起忍受。

我的任务很简单:在我的C++ (Windows)程序中,我希望能够执行一些托管(C#或VB.NET等)代码。

等一下!在你的CTRL之前,去拿谷歌上的一个随机链接,给我一个耳光,然后说:“学着去搜索!”,请继续阅读:

从这里开始,http://sites.google.com/site/robertgiesecke/允许我将C#函数导出为C风格的函数,然后在C++中使用它。一切都很顺利。但是现在我有两个二进制文件,本机exe托管dll

我如何将dll嵌入到exe中并将其映射到内存中,最后从那里调用它呢?换句话说,我希望只有一个包含本机exe和托管dll的exe。

当然我已经试过这个http://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/

不幸的是,这不起作用,代码无法在最后完成“附加”过程。我猜是因为dll的托管表单。

感谢您的阅读。

编辑:我真的不想使用C++/CLI :(

EN

回答 2

Stack Overflow用户

发布于 2012-02-12 09:42:45

您要创建的是“混合模式”程序集。只有在Visual中创建“托管-C++”程序集/可执行程序集时,才能创建此程序集。

根据我多年的经验,C#/VB.NET不支持这一点。虽然我可能错了,但这可能只是Visual的一个限制,而不是C#本身的限制。

票数 0
EN

Stack Overflow用户

发布于 2012-02-12 09:49:46

您在这里尝试的是一些由于安全考虑而不支持的东西。实际上,您正在尝试执行自己的数据块(这些数据块甚至可能被标记为nx (无执行)标志。我在过去尝试过类似的东西(因为DRM的原因;只是在“避免反编译”中--我不喜欢限制性DRM)。这是可能的,但根据目标计算机的安全设置,它是一个易于使用和容易出错的皮塔。如果可能的话,不惜一切代价避免。

博客上的代码基本上使用了正确的方法,但是代码只适用于非托管库(正如您已经注意到的)。这仅仅是由于构建托管库和可执行文件的方式(实际上,对于可执行文件启动运行时环境,只有一个小的本机存根;但是没有一个用于库的存根(因此没有本机入口点;这种方法需要这样做)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9247773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档