使用公共语言运行时支持(/ clr)

时间:2015-12-16 05:21:19

标签: c++ .net mfc clr managed

我需要将公共语言运行时支持(/ clr)添加到我的mfc dll项目中,以便在其中使用托管代码。 我根据如何从msdn使用/ clr编译MFC和ATL代码,为所有项目做了一些设置。

我做了很多测试。但是仍然无法运行我的应用程序,尽管我只在不添加任何托管代码的情况下将/ clr支持添加到项目中。

详见下文:

使用和不使用/ clr之间的异常,调用堆栈,输出信息,输出信息和依赖关系dll的区别请参阅Exception Detail

我无法从调用堆栈中获取任何有用的信息。我甚至不知道在哪里添加断点进行调试。无论如何,在应用程序的InitInstance()中添加断点还为时过早。

似乎是根据输出信息加载dll引起的异常。但我不知道真正的原因。

否则我已经从msdn下载了一个示例解决方案,请参阅Sample about Using /clr in MFC。该示例包含一个mfc应用程序,调用带有/ clr支持的mfc dll。它运作良好。当我将mfc dll(带有/ clr支持)添加到此示例中时,它也可以正常工作。我真的不理会为什么它不能在我的解决方案中工作。我已经检查了项目的属性设置与示例解决方案的比较。似乎没什么特别的。

我确实需要帮助,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

谢谢大家。

我通过延迟在调用它的项目中加载了cotaines / clr支持的dll解决了这个问题。有关如何延迟dll的信息,请参阅Set Delay Loaded DLL。这似乎是由混乱的非托管和托管初始化引起的异常。

“非托管和托管初始化在两个独立且不同的阶段执行。非托管初始化首先发生(通过DllMain),然后通过.NET支持的名为.cctor的构造进行托管初始化。”参见{{ 3}}了解详情