![](/img/trans.png)
[英]Correct way to marshall uchar[] from native dll to byte[] in c#
[英]c# - loading native dll from byte[]
我正在开发一个项目,该项目涉及从.net程序中的网页接收byte [],然后将该byte []作为dll加载。 但是,dll不是.net程序集,它是本机程序集。 我不能使用loadlibrary,因为我必须写入磁盘,并且我想将本机dll保留在内存中。 我不能使用c ++ / cli,因为这都是在mono中完成的,而mono不支持c ++ / cli。 是否有某个库或项目可以让我从C#中的byte []中加载本机dll? 我看过本教程: https : //www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/ ,但这是c ++。
这将帮助您,或将您引向某个地方。
这基本上是您发送的项目的包装,我将为希望查看该项目的任何人提供该回购协议。 未经测试的32位操作系统,因此可能会产生开销。
https://github.com/dretax/DynamicDllLoader
它基本上可以满足您的需求。 期望本机dll的字节数组,并将其加载到当前进程中。
只需使用Assembly.Load(如果是.Net程序集) https://msdn.microsoft.com/zh-cn/library/h538bck7(v= vs.110) .aspx 。
否则,将PInvoke与非托管DLL一起使用。
我将简要介绍一下问题所在:
您真的应该真的埋葬这个主意,并在没有它的情况下生活。 如果您有一个老板想要这个,请说他这是不可能的,比喻是疯狂的。 甚至在字面上可能是疯狂的。 即使您可以做到,也没有管理员可以安装它。
如果那并没有阻止您:最好将其转移到某种帮助程序中,然后通过进程间通信传输数据/结果。 当从.NET应用程序调用旧的,未管理的, 从未迁移到64位的DLL时 ,二进制不匹配通常是一个问题。 辅助进程(始终在x32上运行以匹配DLL)可以帮助您解决此问题。 一旦有了帮助程序,就可以使用Native C ++之类的程序进行编程,在这种程序中,这种类型的恶作剧变得更加容易,甚至可以举个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.