本文介绍了可以使用C ++ CoCreateInstance创建对象,但不能使用C#Activator.CreateInstance的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 大家好, 我为十字架道歉并重新发帖,但我仍然在寻找 答案。 为什么C ++可以创建这个对象,但C#不能? 我试图创建一个默认FTP异步可插件的实例 协议适配器,所以我可以分析FTP服务器的urlmon.dll(IE)和 之间的流量。我试图使用的语言是C#。 适配器的CLSID(在协议注册表项中引用)是 {79eac9e3-baf9- 11ce-8c82-00aa004ba90b}并存储为CLSID_FtpProtocol。 如果我使用以下非托管C ++代码,我可以创建 过滤器的实例。 HRESULT结果; LPUNKNOWN _pUnk = NULL; CoInitialize(NULL); 结果= CoCreateInstance(CLSID_FtpProtocol, NULL, CLSCTX_INPROC_SERVER, IID_IInternetProtocol, (LPVOID *)& _pUnk ); 如果我使用以下C#代码,则会收到错误消息。 (OutOfMemoryException) Guid IID_IInternetProtocolInfo = new Guid(" {79eac9e3-baf9-11ce-8c82-00aa004ba90b}"); objType = Type.GetTypeFromCLSID(IID_IInternetProtocolInfo); Activator.CreateInstance(objType); 任何想法都将不胜感激。 谢谢, Brian。 解决方案 可插入 如果我替换IID_IInternetProtocol使用IID_IUnknown,我获得了访问 违规异常。除非我遗漏了什么,否则看起来像是一个的bug。我怀疑这就是你在托管代码中获得异常的原因。 我建议的唯一解决方法是你通过P / Invoke调用CoCreateInstance 。 Mattias - Mattias Sj?gren [MVP] mattias @ mvps.org http://www.msjogren.net/dotnet/ 请仅回复新闻组。 Hello everyone,I apologize for the cross and re-post, but I am still searching for ananswer.Why can C++ can create this object, but C# can''t?I am trying to create an instance of the default FTP asynchronous pluggableprotocol adaptor, so I can analyse the traffic between urlmon.dll (IE) andthe FTP server. The language I am attempting to use is C#.The CLSID for the adaptor (as referenced in the protocol registry key) is{79eac9e3-baf9-11ce-8c82-00aa004ba90b} and is stored as CLSID_FtpProtocol.If I use the following unmanaged C++ code, I can create an instance of thefilter.HRESULT result;LPUNKNOWN _pUnk = NULL;CoInitialize( NULL);result = CoCreateInstance( CLSID_FtpProtocol,NULL,CLSCTX_INPROC_SERVER,IID_IInternetProtocol,(LPVOID*)&_pUnk);If I use the following C# code, I receive an error. (OutOfMemoryException)Guid IID_IInternetProtocolInfo = newGuid("{79eac9e3-baf9-11ce-8c82-00aa004ba90b}");objType = Type.GetTypeFromCLSID(IID_IInternetProtocolInfo);Activator.CreateInstance(objType);Any thoughts would be greatly appreciated.Thanks,Brian. 解决方案 pluggableIf I replace IID_IInternetProtocol with IID_IUnknown, I get an accessviolation exception. Unless I''m missing something, that looks like abug. I suspect that''s why you get the exception in managed code.The only workaround I can suggest is that you call CoCreateInstancethrough P/Invoke.Mattias--Mattias Sj?gren [MVP] mattias @ mvps.org http://www.msjogren.net/dotnet/Please reply only to the newsgroup. 这篇关于可以使用C ++ CoCreateInstance创建对象,但不能使用C#Activator.CreateInstance的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 02:32