Tag: atl

Shell命名空间扩展。 C#。 C ++,MFC,AT-用什么?

我们需要创建一个Shell命名空间扩展。 我在2005年离开了Windows编程,那时我不得不创建简单的shell扩展,但是构建了非常复杂的COM服务器(进程内和进程外)和桌面应用程序。 我们使用了ATL和MFC库。 时间已经过去了,现在我需要回到visual studio / windows编程。 我期待能够忘记所有关于ATL,MFC和C ++,使用C#在de CLR中创建应用程序。 我记得找到优秀的ATL / MFC开发人员确实非常困难,而且大部分时间我都要完成整个工作。 所以我现在想象一下,在.NET时代,找到可以帮助我的ATL / MFC开发人员真的是不可能的。 我刚刚在MSDN Library中看到过: http : //msdn.microsoft.com/en-us/library/dd758089%28v=VS.85%29.aspx “Microsoft建议不要编写托管的Shell扩展,并且不认为它们是受支持的方案。” – 哦不,不,不……我很兴奋并期待使用C#,WindowsForms甚至WPF,他们说我做不到。 那么如果我想创建一个Windows非托管C ++应用程序,MFC / ATL是唯一的选择吗? 在6年内没有任何改进是真的吗? 所以我必须使用相同的旧技术? 我现在正在寻找Visual Studio 2010中更好的选项,似乎对于C ++非托管应用程序,我们仍然必须使用MFC或ATL。 我的问题是,这是否真的是唯一的方法。 现在我们假设我们必须使用旧的MS库,Shell Extensions都是关于COM接口的,我认为更好的选择是ATL。 但也许我们需要包含一些窗口和一些UI控件。 我记得你可以为ATL项目添加MFC支持或者为MFC项目提供ATL支持。 我知道我曾经使用过那种东西,但很久以前。 你能告诉我什么是更好的选择。 非常感谢Java爱好者和C ++怀旧。

开发Internet Explorer,浏览器帮助对象扩展?

1)我试图在C#中创建一个简单的BHO,就像这里已经回答的那样: https : //stackoverflow.com/a/5740004/285594 2)但不幸的是,他们都尝试了IE11,其中一些使它工作,一些也失败了 3)在按照该答案中提到的所有内容之后,我还购买了官方代码符号,但它根本不适用于IE11 Windows 7 64位。 您可以下载我准备好的Visual Studio 2013版本:其中包含IE11的所有源代码和详细信息: https://www.dropbox.com/s/60kg212vkjb7yud/ClassLibrary2.rar 问:任何人都可以建议/建议/帮助我如何制作这个BHO的一个问候世界? 我也尝试了其他代码来自codeproject,但仍然没有一个我能够工作,尝试4周后,我迷路了,请告诉我的ClassLibrary2.rar有什么问题,这不是浏览文本“浏览器” ? 我完全迷了,请指教。 编辑: IEAddon.cs using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.Win32; using mshtml; using SHDocVw; namespace InternetExplorerExtension { [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] [Guid(“D40C654D-7C51-4EB3-95B2-1E23905C2A2D”)] [ProgId(“MyBHO.WordHighlighter”)] public class WordHighlighterBHO : IObjectWithSite, IOleCommandTarget { const string DefaultTextToHighlight = “browser”; IWebBrowser2 browser; private […]

使用COM互操作从BS ++到C#编组BSTR

我有一个用C ++编写的进程外COM服务器,它由一些C#客户端代码调用。 其中一个服务器接口上的方法将大型BSTR返回给客户端,我怀疑这会导致内存泄漏。 该代码有效,但我正在寻找有关编组BSTR的帮助。 简化一下,服务器方法的IDL是 HRESULT ProcessRequest([in] BSTR request, [out] BSTR* pResponse); 并且实现如下: HRESULT MyClass::ProcessRequest(BSTR request, BSTR* pResponse) { USES_CONVERSION; char* pszRequest = OLE2A(request); char* pszResponse = BuildResponse(pszRequest); delete pszRequest; *pResponse = A2BSTR(pszResponse); delete pszResponse; return S_OK; } A2BSTR在内部使用SysAllocStringLen()分配BSTR。 在C#客户端中,我只需执行以下操作: string request = “something”; string response = “”; myserver.ProcessRequest(request, out response); DoSomething(response); 这样做,因为请求字符串被发送到COM服务器并且正确的响应字符串被返回给C#客户端。 但是每次往返服务器都会泄漏服务器进程中的内存。 crt泄漏检测支持显示crt堆上没有重大泄漏,所以我怀疑泄漏是用IMalloc分配的。 […]

使用C ++将托管事件公开给COM

可以公开在C#中编写的托管事件,以便在使用c ++编写的COM对象中公开和使用。 不熟悉com和atl。 您能否展示一下MSDN文章中显示的C ++方面的内容 http://msdn.microsoft.com/en-us/library/dd8bf0x3.aspx 显示的VB6代码certificate它是可行的。