我有一个使用多个MFC扩展DLL的MFC应用程序。我希望这个应用程序(以及其他几个类似的应用程序)能够访问.net框架的某些部分。我写了一个C#库来完成我想要的.net工作,并希望能够编写一个MFC DLL来隐藏我的应用程序中的所有C ++ / CLI代码。应用程序将保留为纯MFC应用程序,唯一的C ++ / CLI代码将在我的新MFX扩展DLL中。但是,当我这样做时,应用程序在访问新的MFC C ++ / CLI DLL时崩溃了。如果我把C ++ / CLI代码放在应用程序中它可以正常工作,我可以调试我的方式一直到C#。
有谁理解为什么dll的想法不起作用?
由于
答案 0 :(得分:1)
您无法从纯本机代码引用托管程序集。您必须在消费者(项目范围或某些文件)中翻转/ clr开关,或者进行一些互操作。
允许您的消费者说纯母语的一个互操作选项是通过COM Callable Wrapper调用托管程序集。
答案 1 :(得分:1)
我相信我遇到了类似的问题。我的设置类似 - 一个纯MFC应用程序与纯MFC DLL,后者又与C ++ / CLI DLL交互。一切都会运行良好,但退出时会崩溃。使用CppUnit测试纯MFC DLL时,问题更加严重。
在调试时,我发现由于一个错误,我的C ++代码在退出时抛出了访问冲突(通过悬空指针引用的对象)的第一次机会异常。现在,C ++运行时在退出时忽略这些违规,而CLR则不会。 CLR运行时抛出一个未处理的异常,使程序/单元测试看起来崩溃。
你的问题可能有所不同,但听起来与我的问题非常相似。
答案 2 :(得分:0)
MFC dll项目引用C#库,并有一个用/ clr编译的文件,用于处理我的C#库中的接口。我有时在运行时看到过这个工作,但从来没有能够调试到MFC DLL或C#代码。然而,在大多数情况下,它似乎并不稳定和崩溃。