,就在那里!,你可能认为这已经被问了几百万次了,被回答的次数和地球绕太阳旋转的次数一样多,但是请在这个问题上和我一起忍受。
我的任务很简单:在我的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 :(
发布于 2012-02-12 09:42:45
您要创建的是“混合模式”程序集。只有在Visual中创建“托管-C++”程序集/可执行程序集时,才能创建此程序集。
根据我多年的经验,C#/VB.NET不支持这一点。虽然我可能错了,但这可能只是Visual的一个限制,而不是C#本身的限制。
发布于 2012-02-12 09:49:46
您在这里尝试的是一些由于安全考虑而不支持的东西。实际上,您正在尝试执行自己的数据块(这些数据块甚至可能被标记为nx (无执行)标志。我在过去尝试过类似的东西(因为DRM的原因;只是在“避免反编译”中--我不喜欢限制性DRM)。这是可能的,但根据目标计算机的安全设置,它是一个易于使用和容易出错的皮塔。如果可能的话,不惜一切代价避免。
博客上的代码基本上使用了正确的方法,但是代码只适用于非托管库(正如您已经注意到的)。这仅仅是由于构建托管库和可执行文件的方式(实际上,对于可执行文件启动运行时环境,只有一个小的本机存根;但是没有一个用于库的存根(因此没有本机入口点;这种方法需要这样做)。
https://stackoverflow.com/questions/9247773
复制相似问题