我正在处理一个项目,该项目涉及从.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 ++。
答案 0 :(得分:0)
这将帮助您,或将您带到某个地方。
这基本上是您发送的项目的包装,我将为希望查看该项目的任何人提供存储库。未经测试的32位操作系统,因此可能会产生开销。
https://github.com/dretax/DynamicDllLoader
它基本上可以满足您的需求。期望本机dll的字节数组,并将其加载到当前进程中。
答案 1 :(得分:-1)
我将简要介绍一下这个谎言的问题:
你真的,真的应该只是埋葬这个想法而没有它。如果你有一个想要这个的老板,那就说他是不可能的和比喻性的疯狂。可能甚至是疯狂的。即使你能做到,也没有安心的管理员。
如果那还没有想到你:最好把它移到某种辅助进程中,然后通过进程间通信传输数据/结果。当调用旧的,未管理的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一起使用。