如何从非托管代码执行托管代码
How to execute managed code from unmanaged code?
抓住它你可能认为这个问题已经被问了数百万次,而且已经被回答了地球绕太阳旋转的次数,但请耐心听我说。
我的任务很简单:在我的C++(Windows)程序中,我希望能够执行一些托管代码(C#或VB.NET等)。
等等在你使用CTRL-T之前,先从谷歌上随机获取一个链接,然后打在我脸上,然后说"学会搜索!",请继续阅读:
我从这里开始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:(
您试图创建的是一个"混合模式"程序集。只有在Visual Studio中创建"Managed-C++"程序集/可执行文件时,才能创建此程序集。
根据我多年的经验,C#/VB.NET不支持这一点。尽管我可能错了,这可能只是Visual Studio的限制,而不是C#本身。
由于安全问题,您在这里尝试的内容并没有得到真正的支持。从本质上讲,您正在尝试执行自己的数据块(甚至可能标记有nx(无执行)标志)。我过去也尝试过类似的东西(出于DRM的原因;只是在"避免反编译器"中——我不喜欢限制性DRM)。这是可能的,但它是一个PITA,根据目标机器的安全设置,它很容易出错。如果可能的话,不惜一切代价避免它。
博客上的代码基本上使用了正确的方法,但这些代码只能用于非托管库(正如您已经注意到的那样)。这只是由于托管库和可执行文件的构建方式(本质上只有一个小的本地存根供可执行文件启动运行时环境;但没有库(因此没有本地入口点;这是该方法所必需的))。
- 为什么g++在未执行的代码处标记强制转换错误
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 执行此代码时,它不显示任何输出.为什么?
- 如何使用指针直接从托管代码中的非托管代码中读取矢量数据
- Visual Studio 发布模式阻止在调试模式下执行的代码.使用 WinHTTP 和多线程
- 使用哪种模式来执行新代码,只需添加基类的新子类?
- 如何在C++中执行以前执行的代码行
- 异步接口托管 - > 非托管代码
- 定义在其中执行不同代码路径的代码节
- 从C++(非托管代码)检索数组到 C 尖锐形式(托管)
- 我在哪里编写在退出 C++ 窗口窗体应用程序之前执行的代码部分
- 从本机代码返回到托管代码会损坏返回的对象
- 在两个派生类之间执行专用代码
- 如何在析构函数中执行一些代码*在*成员被销毁之后
- 为什么我的编译器在执行此代码时出现分段错误?
- 将C++非托管代码转换为 C#
- 为什么执行此代码后0xAA的值相同
- llvm可以执行托管语言的代码吗
- 如何从非托管代码执行托管代码
- 托管代码可以像未托管代码一样快速地执行计算吗