c# - 从byte []加载本机dll

时间:2017-09-22 20:28:29

标签: c# c++ .net dll

我正在处理一个项目,该项目涉及从.net程序中的网页接收byte [],然后将该字节[]加载为dll。但是,dll不是.net程序集,它是本机程序集。我无法使用loadlibrary,因为我必须写入磁盘,我想将本机dll保留在内存中。我不能使用c ++ / cli,因为这一切都是用单声道完成的,而mono不支持c ++ / cli。是否有某个库或项目允许我从c#中的byte []加载本机dll?我已经看过这个教程:https://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/,但这是c ++。

3 个答案:

答案 0 :(得分:0)

这将帮助您,或将您带到某个地方。

这基本上是您发送的项目的包装,我将为希望查看该项目的任何人提供存储库。未经测试的32位操作系统,因此可能会产生开销。

https://github.com/dretax/DynamicDllLoader

它基本上可以满足您的需求。期望本机dll的字节数组,并将其加载到当前进程中。

答案 1 :(得分:-1)

我将简要介绍一下这个谎言的问题:

  • 您正在从互联网接收DLL。每个管理员都会怀疑他是不是疯了,或者真的站在“工作原理”的描述中。在上个世纪,我们遇到了远程代码执行和数据阵列代码注入方面的足够问题,无需尝试即可知道这将如何失败。
  • 托管.NET运行时的任何设计都在那里,所以你不能那样做。你可能必须去无人管的代码。那时,你可以用原生C ++编写。
  • 它甚至可能会因为尝试拉动它而碾过磨机病毒扫描仪启发程序。因为这是我的操作系统的访问者永远不应该试图拉动的简短列表。

你真的,真的应该只是埋葬这个想法而没有它。如果你有一个想要这个的老板,那就说他是不可能的和比喻性的疯狂。可能甚至是疯狂的。即使你能做到,也没有安心的管理员。

如果那还没有想到你:最好把它移到某种辅助进程中,然后通过进程间通信传输数据/结果。当调用旧的,未管理的never-migrated-to-64-bit DLL's from a .NET Application时,错配的双重性通常是个问题。辅助进程(总是在x32上运行以匹配DLL)可以帮助解决这个问题。一旦你得到了一个帮助程序,它就可以像Native C ++那样编程,这些恶作剧更容易,你甚至可以举一个例子。

答案 2 :(得分:-2)

只需使用Assembly.Load(如果那是.Net程序集)https://msdn.microsoft.com/en-us/library/h538bck7(v=vs.110).aspx

否则,请将PInvoke与非托管DLL一起使用。