我需要将公共语言运行时支持(/clr)添加到我的mfc dll项目中,以便在其中使用托管代码。根据如何使用msdn中的/clr编译MFC和ATL代码,我为所有项目做了一些设置。
我做了很多测试。但是仍然无法运行我的应用程序,尽管我只向项目添加了/clr支持,而没有添加任何托管代码。
详见下文:
异常、调用堆栈、输出信息、使用和不使用/clr之间的输出信息和依赖dll的差异请参见异常详细信息
我无法从调用堆栈中获得任何有用的信息。我甚至不知道在哪里添加调试的断点。无论如何,在应用程序的InitInstance()中添加断点为时已晚。
这似乎是根据输出信息加载dll引起的异常。但我不知道真正的原因。
否则,我已经从msdn下载了一个示例解决方案,请参阅关于在MFC中使用/clr的示例。该示例包含一个mfc应用程序,该应用程序调用支持/clr的mfc dll。而且效果很好。当我将我的mfc dll(支持/clr)添加到这个示例中时,它也可以很好地工作。我真的不明白为什么它在我的解决方案中不起作用。我已经检查了我的项目的属性设置与示例解决方案的比较。似乎没有什么特别的。
我确实需要帮助,有什么建议吗?
谢谢大家。
我已经通过延迟加载cotaines/clr在调用它的项目中支持的dll来解决了这个问题。有关如何延迟dll,请参阅设置延迟加载的dll。这似乎是由混乱的非托管和托管初始化引起的异常。
"非托管初始化和托管初始化分为两个不同的阶段进行。非托管初始化首先进行(通过DllMain),然后通过名为.ctor的.NET支持结构进行托管初始化。"有关详细信息,请参阅混合程序集的初始化