Assembly.LoadFrom 在带有 MFC 的 cpp/CLI DLL 上失败,包括
Posted
技术标签:
【中文标题】Assembly.LoadFrom 在带有 MFC 的 cpp/CLI DLL 上失败,包括【英文标题】:Assembly.LoadFrom fails on a cpp/CLI DLL with MFC includes 【发布时间】:2013-06-13 17:07:28 【问题描述】:我有一个 C# 应用程序,它使用 Assembly.LoadFrom
动态加载其他 dll。
如果 dll 是受 MFC 支持的托管 cpp 并且任何包含此类 afxwin.h
,则此方法将失败。
要重现此行为,您只需使用向导创建一个新的托管 cpp dll。将 MFC 支持标志添加到配置中。除非您没有将任何 MFC 标准包含在 stdafx.h
文件中,否则 Assembly.LoadFrom
不会失败。如果将#include "afxwin.h"
放入stdafx.h
文件中,Assembly.LoadFrom
将失败! (即 dll 为空!)
有什么线索???
谢谢, 出租车
【问题讨论】:
+1 表示不使用程序集标签。 :) 对于依赖于非托管 DLL 的混合模式程序集,LoadFrom() 很可能会失败。 Windows 没有太多机会找到这样的 DLL,因为它不太可能存储在与 EXE 相同的目录中或 PATH 上。 空 DLL 听起来不太可能。 程序集都在同一个目录中。没有 #include "afxwin.h" 的空 dll 加载良好,添加包含,没有其他内容让加载失败。 @Devolus: mov ebx,声望;公司 ebx; :) 【参考方案1】:我尝试按照您在 Visual Studio 2010 中描述的方式进行操作。
我将项目设置设置为使用 MFC 作为共享 DLL,并将 afxwin.h 包含在 stdafx.h 中。 我成功调用了 AfxMessageBox()。所以这不可能是你使用 MFC 的事实,它必须是别的东西。
我想您将 MFC 用作共享 DLL?另外,请写下您的完整异常详细信息。 使用进程监视器 (http://technet.microsoft.com/en-us/sysinternals/bb896645) 检查您的应用尝试加载哪些 DLL。也许这将揭示可能丢失的 DLL(如 MFC 运行时)。使用 Dependency Walker (depends.exe) 查看混合模式库引用的 DLL。
另外,如果你碰巧使用了静态链接的 boost::thread,这将导致混合模式程序集的加载失败。
【讨论】:
以上是关于Assembly.LoadFrom 在带有 MFC 的 cpp/CLI DLL 上失败,包括的主要内容,如果未能解决你的问题,请参考以下文章
如果在 Windows 服务 .net 可执行文件中调用 .NET Assembly.Load/LoadFrom 会失败
ASP.NET:CreateDomain(...).CreateInstanceAndUnwrap(...) 或 Assembly.LoadFrom(...).GetExportedTypes() 抛
Assembly.LoadFrom加载程序集类型转换失败解决方法