DLL 在 MFC 应用程序中有效,但在 .NET 中无效 [重复]

Posted

技术标签:

【中文标题】DLL 在 MFC 应用程序中有效,但在 .NET 中无效 [重复]【英文标题】:DLL Works in MFC App But No In .NET [duplicate] 【发布时间】:2011-09-19 16:26:24 【问题描述】:

可能重复:MFC Dll with COM Interface

我有一个用 VC6 编写的旧 DLL。我试图让它与 .NET Winforms 应用程序一起使用。我已经导入了 DLL 并在其中调用了函数。这行得通,我可以打破 DLL,看到所有内容都正确传递给它,但后来尝试使用 CoCreateInstance 创建 COM 组件时 DLL 失败。此错误与访问冲突。在 MFC 应用程序中使用相同的 DLL 并传递相同的参数可以正常工作。

关于为什么这在 .NET 中失败但在 MFC 中失败的任何想法?

【问题讨论】:

【参考方案1】:

COM 组件可能需要单线程单元 (STA),而您的 .Net 线程位于多线程单元 (MTA) 中。尝试仅从特定 STA 线程调用您的 DLL。

【讨论】:

如何在 .NET 中确保这一点? 我现在已经从它自己的线程调用了 DLL。在调用 Start 之前,我通过调用 SetApartmentState 将此线程设置为 STA。但是,这没有任何区别。

以上是关于DLL 在 MFC 应用程序中有效,但在 .NET 中无效 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

包装 MFC 应用程序(目标移动设备)以创建 dll 以在 c#.NET 中使用以进行互操作

将 MFC Gui 应用程序包装到 .NET 互操作的 DLL(或其他东西)中

.NET 客户端 - MFC 常规 DLL 和用户定义的消息

CefInitialize 不适用于 mfc dll

使用 fprintf 调试调用 C DLL 的 MFC 程序

从 .NET C# DLL 更新 MFC 对话框中的进度条