3

我有一个使用多个 MFC 扩展 DLL 的 MFC 应用程序。我希望这个应用程序(以及其他几个类似的应用程序)能够访问 .net 框架的某些部分。我编写了一个 C# 库来完成我想要的 .net 工作,并希望能够编写一个 MFC dll 来隐藏我的应用程序中的所有 C++/CLI 代码。这些应用程序将保留为纯 MFC 应用程序,唯一的 C++/CLI 代码将在我的新 MFX 扩展 DLL 中。但是,当我这样做时,应用程序在访问新的 MFC C++/CLI dll 时崩溃了。如果我将 C++/CLI 代码放在应用程序中,它可以正常工作,我可以一直调试到 C#。

有谁明白为什么 dll 的想法不起作用?

谢谢

4

3 回答 3

1

您不能从纯本机代码中引用托管程序集。您必须翻转使用者上的 /clr 开关(在项目范围内或在某些文件中)或进行一些互操作。

允许您的消费者说纯本机的一种互操作选项是通过COM Callable Wrapper调用托管程序集。

于 2008-10-22T02:25:00.773 回答
1

我相信我遇到了类似的问题。我的设置类似——一个纯 MFC 应用程序,带有一个纯 MFC DLL,而后者又与 C++/CLI DLL 交互。一切都会运行良好,但它会在退出时崩溃。该问题在使用 CppUnit 测试纯 MFC DLL 时更加严重。

在调试时,我发现由于一个错误,我的 C++ 代码在退出时抛出了访问冲突(通过悬空指针引用的对象)的第一次机会异常。现在,C++ 运行时在退出时会忽略这些违规,而 CLR 不会。CLR 运行时引发未处理的异常,使其看起来程序/单元测试崩溃。

您的问题可能有所不同,但听起来确实与我的问题非常相似。

于 2008-11-04T06:48:10.320 回答
0

MFC dll 项目引用了 C# 库,并有一个使用 /clr 编译的文件,用于处理与我的 C# 库的接口。实际上,我有时在运行时看到过这项工作,但从未能够调试到 MFC dll 或 C# 代码中。但是,在大多数情况下,它似乎根本不稳定并且崩溃。

于 2008-10-22T07:31:42.340 回答