Assembly.LoadFile中的OutOfMemoryException

时间:2015-03-04 20:49:07

标签: vb.net com c++-cli out-of-memory system.reflection

我对这个很难过。有时,当我致电Reflection.Assembly.LoadFile("path to my dll")时,它会抛出OutOfMemoryException

StackTrace只显示:

at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
at System.Reflection.Assembly.LoadFile(String path)

并且没有InnerException来检查更详细的异常信息。

但是,似乎只能通过COM。

让我解释一下:

我的应用程序可以作为常规旧的exe启动,也可以通过COM接口(CreateObject("blahblahblah"))通过Excel启动

在初始化我的一个GUI类时,它将静态加载我的所有引擎DLL(我的应用程序有引擎和GUI)

总共有6个引擎DLL - 静态加载的汇编代码在VB.NET中,看起来有点像这样:

Private Shared dllPath As String = System.IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().Location) & System.IO.Path.DirectorySeparatorChar)
Private Shared ReadOnly engineDLL1 As Reflection.Assembly = Reflection.Assembly.LoadFile(dllPath + "engineDLL1_name.dll")
...
Private Shared ReadOnly engineDLL6 As Reflection.Assembly = Reflection.Assembly.LoadFile(dllPath + "engineDLL6_name.dll")

我试图加载的引擎DLL是混合程序集(包含本机和托管C ++) - 不确定是否重要。

无论如何,使用procexp,我注意到以标准方式打开我的应用程序,所有这些静态加载的DLL都加载正常。但是,如果我通过COM初始化此类(通过Excel,CreateObject("ProgID of the class with the code above")),它会将OutOfMemoryException抛出到engineDLL4周围。

如果有人可以提供任何见解,那将非常感谢!!

0 个答案:

没有答案