草庐IT

c - 如何通过 COM 接口(interface)以编程方式激活 OLE 控件?

我有一个通过ActiveX嵌入按钮控件的应用程序。该按钮由第三方提供,它实现了整个范围的ActiveX接口(interface)(其中包括IOleInPlaceObject)。我确实引用了IUnknown按钮的实现。我面临的问题是IOleWindow::GetWindow对象提供的函数总是返回错误;错误代码是0x80004005这显然是一个commonHRESULTvalue意思是E_FAIL。描述性不强。值得一提的是,该对象还通过其IDispatch公开了一个hWnd属性。执行;查询成功,但该属性的值始终为零。谷歌搜索表明我可能需要在hWnd属性产生有用值之前“激活”OLE对象。有谁

c++ - 如何在不使用 OLE DB API 的情况下使用 C++ 查询 MS SQL Compact Server 3.5 数据库?

我有MSSQLCompactServer3.5的dll和包含文件。没有OLEDB如何使用它?我只想自己加载dll并调用必要的方法,请不要使用COM。有人知道API吗?编辑如果这不可能,是否有一个完整的C++示例演示如何使用MSSQLCompactServer版本访问数据库? 最佳答案 我刚刚注意到您没有提到COM。如果不是那样的话,我会建议使用ADO。最近我发布了一些RawC++codetodisplaythenamesoftablesinanSQLcompactserverusingOLEDB的OLEDB代码您可能会觉得有用。否则

c++ - 使用 OLE 剪贴板和经典剪贴板时出现意外/奇怪的结果,还是我错过了什么?

我正在尝试执行以下技巧:我要将IDataObject*设置到剪贴板中,所以我使用OleSetClipboard()将其设置到剪贴板中。我有另一个CLIPFORMAT我想添加到剪贴板,但我不能用OleSetClipboard()来做,因为IDataObject*我收到的未实现SetData()方法。所以,为了克服这个限制,我用GetClipboardOwner()OpenClipboard(),这样,我可以SetClipboardData()到剪贴板而不用EmptyClipboard()首先。现在,一切正常,但OleGetClipboard()没有返回我使用SetClipboardDat

windows - 当用户没有足够的权限时隐藏 COM-Server OLE 错误消息

我正在升级一个带有COM自动化接口(interface)的Delphi软件项目,以简化一些批处理任务(通过WSH脚本)。这本身很容易......但是,软件的大多数“实际”用户不需要(甚至不知道)这个界面,我想让他们免于注册COM-Server或错误消息当程序无法启动com服务器时弹出(目前该软件没有安装程序-它只是复制并运行。注册任何东西对用户来说都是一个额外的步骤。它是内部的,所以客户已经习惯了。..).真正的问题是:我能否以编程方式查明运行该软件的当前用户是否有足够的权限来注册COM服务器,然后(如果没有)避免尝试创建服务器?我想要一种行为,当用户没有足够的权限时,自动化服务器就不

c++ - 使用 IDispatch::Invoke 的 OLE 交互参数构造

我正在学习MicrosoftarticleaboutOLEautomation.据我了解,AutoWrap函数用于调用外部方法、获取/设置属性。让我们尝试理解调用此函数的代码://Makeitvisible(i.e.app.visible=1){//parameterpreparationVARIANTx;x.vt=VT_I4;//typeofparameterx.lVal=1;//valueAutoWrap(DISPATCH_PROPERTYPUT,//setpropertyNULL,//weneednoresultpXlApp,//pointertoExcelappL"Visibl

python - 在 wxPython 中进行拖放的 OLE 方式

我有一个在MSWindows上运行的wxPython应用程序,我希望它支持在其实例之间拖放(因此用户打开我的应用程序3次并将数据从一个实例拖到另一个实例)。wxPython中的简单拖放就是这样工作的:用户发起拖动:源窗口将必要的数据打包到wx.DataObject()中,创建新的wx.DropSource,设置其数据并调用dropSource.DoDragDrop()用户将数据拖放到目标窗口:拖放目标调用库函数GetData()将实际数据传输到其wx.DataObject实例,最后-dataObject.GetData()解压实际数据。我想要一些更复杂的拖放功能,允许用户选择拖放之后他

windows - 如何关闭打开的 OLE 对话框

我有一个函数可以关闭应用程序中除主窗体之外的所有窗体procedureCloseOpenForms(constComponent:TComponent);vari:Integer;beginfori:=0topred(Component.ComponentCount)dobeginCloseOpenForms(Component.Components[i]);ifComponent.Components[i]isTFormthenbeginTForm(Component.Components[i]).OnCloseQuery:=nil;TForm(Component.Component

windows - 多个 ProgID 可以指向同一个 ClsID 吗?

我正在研究一组本质上是插件的东西,它们是COM服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的ProgID。当插件需要访问配置项时,它会调用并传入其ProgID和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的ProgID,每个ProgID将指向插件的单个ClsId。因此,插件的每个实例都将由其ProgID标识,ProgID仍用作配置数据的主键,并且一切都是100%向后兼容的。那么,问题:这是一种可以接受的技术吗?(多个ProgID都指向一个

windows - 使用 COM/Ole/ActiveX 进行回调/事件管理

我正在为脚本语言编写nativeCOM/Ole/ActiveX包装器。我需要一些建议来实现事件/回调(比如来自Microsoft.XMLHTTP对象的onreadystatechange)我注意到一些COM对象可以通过IDispatch接口(interface)调用我的自定义对象。这是管理事件的唯一方法吗? 最佳答案 如果您要询问有关COM事件如何工作的更一般的问题(来自任何客户端,而不仅仅是对安全性等有一些特定要求的IE)以及如何公开对象的事件,那么有一个很好的CodeProject文章,UnderstandingCOMEvent

COM 引用计数

美好的一天。什么是初始化COM接口(interface)引用计数的正确方法?我看到很多例子,其中引用计数被初始化为1,但也看到了设置为0的例子。什么是差异? 最佳答案 您必须这样设置它,以便在调用最后一个Release()时对象自行处理。这通常意味着当您创建对象时,在您处理指向请求该对象的调用者的对象指针之前,它的引用计数必须为1。您是将引用计数器初始化为零然后调用AddRef()(在将指针移交给调用方之前)还是将其初始化为1而不是调用AddRef()通常由您决定。 关于COM引用计数,