微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 .Net 4.6.1 升级到 .Net 5 后,为什么 CreateManagedControl 访问冲突?

如何解决从 .Net 4.6.1 升级到 .Net 5 后,为什么 CreateManagedControl 访问冲突?

我有一个 MFC 应用程序,其中包含一个 C++/CLI 项目,该项目调用 MFC::CWinFormsControl<MyWidget>::CreateManagedControl() 来创建用 C# 编写的控件。 这在 .Net Framework 4.6.1 下运行良好,但现在我已将 C++/CLI 和 C# 项目升级到 .Net 5,它会导致访问冲突:

Exception thrown at 0x00007FFC81A3F528 (clr.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

堆栈跟踪:

mfc140ud.dll!COleControlSite::CreateControlCommon(CWnd * pWndCtrl,const _GUID & clsid,const CControlCreationInfo & creationInfo,const wchar_t * lpszWindowName,unsigned long dwStyle,const tagPOINT * ppt,const tagSIZE * psize,unsigned int nID,CFile * pPersist,int bStorage,wchar_t * bstrLicKey) Line 224 C++
mfc140ud.dll!COleControlSite::CreateControl(CWnd * pWndCtrl,unsigned int nID) Line 198  C++
mfc140ud.dll!COleControlContainer::CreateControlCommon(CWnd * pWndCtrl,wchar_t * bstrLicKey,COleControlSite * * ppNewSite) Line 301 C++
mfc140ud.dll!COleControlContainer::CreateControl(CWnd * pWndCtrl,unsigned int nID) Line 270 C++
mfc140ud.dll!CWnd::CreateControl(const CControlCreationInfo & creationInfo,CWnd * pParentWnd,unsigned int nID) Line 90    C++
[Managed to Native Transition]  
CLI.dll!Microsoft::VisualC::MFC::CWinFormsControl<Widget::MyWidget>::InternalCreateManagedControl(CControlCreationInfo& info,unsigned int dwStyle,tagRECT& rect,CWnd* pParentWnd,int nID) Line 122  C++
CLI.dll!Microsoft::VisualC::MFC::CWinFormsControl<Widget::MyWidget>::CreateManagedControl(System::Type^ pType,int nID) Line 133 C++
CLI.dll!Microsoft::VisualC::MFC::CWinFormsControl<Widget::MyWidget>::CreateManagedControl(unsigned int dwStyle,int nID) Line 149  C++
CLI.dll!Cli::CreateControl(CWnd* parent,int id) Line 191   C++

其他 C# 功能可以顺利运行,实验性 gcnew Widget::MyWidget() 也是如此。我一直在尝试项目设置,但一无所获。有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。