我有一个C#应用程序,使用Assembly.LoadFrom
动态加载其他dll。
如果dll是具有MFC支持的托管cpp且任何包含此类afxwin.h
的方法,则此方法将失败。
要重现此行为,您只需使用向导创建一个新的托管cpp dll。将MFC支持标志添加到配置中。在您未在stdafx.h
文件中放入任何MFC标准包含之前,Assembly.LoadFrom
不会失败。如果您将#include "afxwin.h"
放在stdafx.h
文件中,则Assembly.LoadFrom
会失败! (即dll是空的!)
任何线索???
谢谢, Cabbi
答案 0 :(得分:1)
我尝试按照您在visual studio 2010中的描述进行操作。
我将项目设置设置为使用MFC作为共享DLL,并在stdafx.h中包含afxwin.h。 我成功调用了AfxMessageBox()。所以你不能使用MFC,它必须是别的东西。
我想您使用MFC作为共享DLL?另外,请写下您的完整例外详情。 使用进程监视器(http://technet.microsoft.com/en-us/sysinternals/bb896645)检查应用程序尝试加载的DLL。也许这将揭示可能缺少的DLL(如MFC运行时)。使用Dependency Walker(depends.exe)查看混合模式库所指的DLL。
另外,如果你碰巧使用boost :: thread静态链接,这将导致混合模式程序集的加载失败。