Articles of com

我在哪里可以find有关Microsoft在未来版本的Windows中支持COM +的计划的可靠信息?

当看到一个有着许多竞争优先级的大型Web应用程序时,我面临的一个问题是大量的COM +组件。 在某些情况下,这些东西需要在其他一些技术(WCF,.NET等)中进行重新devise。 在微软停止支持它之前,我将如何优先考虑这一努力的一部分将是“低多久? 我有一个时间魔鬼find任何从微软的官方信息,关于他们目前的计划是在未来版本的Windows中的COM +支持。 任何指导将大大推进。

Linux / UNIX中COM编程的模拟

组件对象模型(COM)是(或者…)在Windows中提供与语言无关的软件组件的方式。 在Linux / UNIX中是否有任何编程模型,具有通过二进制组件重复使用代码的相同原理?

在* nix系统上是否有与COM等价的function? 如果不是,那么nix的可重用性是什么?

我对Windows COM及其背后的想法有所了解。 我想了解* nix系统是否具有相同的function,或者为什么不具备这些function?

为连接点客户端提供IDispatch实现

我用一个简单的COM对象写了一个简单的COM DLL inproc服务器。 COM对象实现一个连接点。 我知道如何创build一个从IDispEventImpl派生的ATL客户端,并使用汇地图来简化这个过程。 但是,为了演示的目的,我想创build一个win32控制台应用程序,该应用程序使用调用我的简单COM对象的类,然后充当连接点接收器。 我不知道如何提供一个IDispatch的实现 – 有人可以推荐文档,因为我找不到任何(我有ATL内部,但这似乎并不包括我需要)。 这是我已经得到的课程: #pragma once #include <iostream> using namespace std; // Because we're implementing a connection points sink (_IPogFarmEvents) // in a non-ATL class, we must provide implementations for IUnknown and IDispatch. class KidWithAPogFarm : public _IPogFarmEvents { private: DWORD m_dwRefCount; LONG m_lNumPogs; public: KidWithAPogFarm() : m_dwRefCount (0), […]

使用Windows IStream下载文件

我正在实现将一个虚拟文件从一个网站拖出,并通过一个ActiveX控件拖到桌面上。 如何在我的http url上创build一个IStream ,所以Windows可以执行这个drop? 我正在看的例子使用SHCreateStreamOnFile复制本地文件; 对于其他types的stream,例如http文件下载,必须有类似的function。

为什么“本地启动”默认允许外部服务器,但“本地激活”不是?

我现在需要在ASP.NET处理程序中创build一个由out-proc COM服务器提供的COM对象。 所以每次我部署COM服务器,我必须启动DCOMconfiguration并更改安全设置。 具体而言,我需要确保本地用户ASPNET允许“本地启动”和“本地激活”。 我惊讶的是,当我打开相关的设置页面“本地启动”已经被允许,但“本地激活”是不允许的。 这没有任何意义 – 为什么我需要这样的权限组合?

从C#应用程序获取WindowsExplorer中的当前select?

是否有可能从我的C#应用​​程序获取当前在Windows资源pipe理器中select的文件的列表? 我已经做了很多关于从C#这样的托pipe语言与Windows资源pipe理器交互的不同方法的研究。 最初,我正在研究shell扩展的实现( 在这里和这里例如),但显然这是从托pipe代码中的一个坏主意,可能无论如何对我的情况可能矫枉过正。 接下来,我看着PInvoke / COM解决scheme,并find这篇文章 ,这导致我这样的代码: SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows(); string filename; ArrayList windows = new ArrayList(); foreach(SHDocVw.InternetExplorer ie in shellWindows) { filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower(); if(filename.Equals("explorer")) { Console.WriteLine("Hard Drive: {0}", ie.LocationURL); windows.Add(ie); var shell = new Shell32.Shell(); foreach (SHDocVw.InternetExplorerMedium sw in shell.Windows()) { Console.WriteLine(sw.LocationURL); } } } …但个别的InternetExplorer对象没有获得当前文件select的方法,虽然它们可以用来获取有关窗口的信息。 然后我发现这篇文章正是我所需要的,但在C ++中。 以此为出发点,我试图通过在我的项目中添加shell32.dll作为参考进行一些翻译。 我结束了以下几点: […]

如何在命名空间扩展中添加(启用)标准的“发送到”上下文菜单选项

我有一个命名空间扩展,它提供了一个服务器中的文件/文件夹的虚拟视图。 在IContextMenu::QueryContextMenu()我已经添加了一些自定义菜单项。 我还在IShellFolder::GetAttributesOf()设置了几个SGAOF标志,以获得上下文菜单中的重命名,删除和属性。 有什么办法可以让我的名字空间扩展项目的上下文菜单中的“ 发送到 ”选项? 一旦启用这些命令,我​​该如何处理这些命令? 请指教。 这是Denis Anisimovbuild议的那个代码 const CLSID SendToCLSID = { 0x7BA4C740, 0x9E81, 0x11CF, { 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37 } }; HRESULT CMyNSEContextMenu::Initialize(PCIDLIST_ABSOLUTE pidlFolder , IDataObject *pDataObj, HKEY hkeyProgID ) { OutputDebugString(L"CMyNSEContextMenu::Initialize\n"); //Other initialization code … … if (_pdtobj) { _pdtobj->Release(); _pdtobj = NULL; } _mpidlFolder = […]

在64位Windows Server 2008 Standard SP2 IIS 7上注册一个dll

项目:VS2010 C#类库。 本地机器:Win 7 64bit 项目中更改的项目如下: Properties / AssemblyInfo.cs [assembly:ComVisible(true)] 项目/属性/生成选项卡:注册Com for Interop:选中生成Seralization程序集:自动 我已经为接下来的post设置了testing类,comvisible = true和guids等: 使用4.0框架和Visual Studio 2010为ASP Classic构buildCOM互操作库 我能够通过regasm在本地机器上注册这个dll。 C:\ windows \ Microsoft.Net \ Framework \ v4.0.30319> regasm NrccuaComFileSystem.dll types注册成功。 在服务器regsvr,regasm,reglm与tlb都失败,并显示以下消息: RegAsm:错误RA0000:无法加载文件或程序集'file:/// c:\ Windows \ Micr osoft.NET \ Framework \ v4.0.30319 \ NrccuaComFileSystem.dll'或其依赖项之一。 操作不受支持。 (从HRESULTexception:0x80131515) 我在这里做错了什么? 它是否正在寻找一个入口点,如果是的话,完全失去了如何提供。 看了下面的post也… 经典的ASP使用COM + .net互操作64位Windows Server 2008 […]

资源pipe理器在执行拖放操作时不会释放IDataObject

我在我的应用程序中执行拖放操作。 我遇到了Windows资源pipe理器在拖放操作后不能释放我的IDataObject的问题。 为了隔离这个问题,我实现了一个非常简单的拖放源代码,它应该在大多数Win32编译器中编译。 数据对象不包含数据; 正如你所看到的一切非常简单。 数据对象包含可以使用DebugView查看的跟踪,以指示何时创build以及何时销毁。 重现: 按住鼠标键开始拖动。 将对象拖放到打开的Windows资源pipe理器窗口中。 观察DebugView中的输出; 样本输出: [4964] gdo ctor [4964] gds ctor [4964] gds dtor 这个输出表明数据源被破坏了,但有人仍然持有对我的IDataObject的引用! 开始在同一浏览器窗口中拖动文件。 即使我现在还没有和我的项目进行交互,它会导致gdo dtor被打印 – 表示对IDataObject的最终引用被释放。 我正在运行Windows 7 64位。 有意思的是,一些资源pipe理器的窗口在释放之后立即释放数据对象; 其他人似乎没有这样做,直到你开始拖动一个不同的对象到资源pipe理器窗口,如步骤#4所示。 它也似乎取决于在窗口中的哪个位置放置对象 – 有些地方会立即释放对象,有些则不会。 这很奇怪! 我的问题是这些: 资源pipe理器正常吗? 为什么是这样? 或者我的代码中有一个错误? 当我的应用程序终止时,看到COM对象仍然被引用是非常令人不安的! 这也意味着IDataObject所拥有的资源是捆绑的,直到资源pipe理器决定释放该对象。 如果这确实是正常的行为(即使它不是,我想我应该处理不合适的放置目标),那么当应用程序终止时清理未释放COM对象的最佳做法是什么? 我正在用C ++ Builder编写和使用ATL,当用户试图closures应用程序,他们得到一个非常不友好的“在这个应用程序仍然有活动的COM对象,等等等等等等,你确定要closures这个应用程序?” – 大概由ATL生成,它注意到有未发布的COM对象 – 通常在应用程序closures时是一件坏事。 这是一些示例代码。 它实现了一个不提供数据的IDataObject,以及一个非常基本的IDropSource。 当然,真正的应用程序通过IDataObject提供数据,但是我发现这个基本的实现足以重现这个问题。 我用C ++ Builder写的,但是其中90%是可移植的Win32代码。 […]