首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    服务器是干嘛的

    实际上,C#调用DCOM服务器的时候,只需要在C#这边做一些手脚,对于原先的C++ DCOM服务器来说,是不需要做任何改动的。...查询注册表,启动CLSID对应的COM服务器,并激活COM对象。 2. 根据IID获取COM的指针,然后调用COM对象提供的服务。...每次C#程序调用这个类的抽象函数的时候,CLR会自动将调用转换成对应的COM调用。...获取已经激活的DCOM对象的指针,接着再是查询对应的COM接口,本文的例子里是IStream接口,这样在C#程序里面才能调用。...但是又涉及到另外一个问题,C#是强类型语言,所有的对象调用都是要有明确的类型定义的。为了解决这个问题,我们需要在C#程序里自己定义好COM对象和接口的定义。

    8.2K31

    S_OK,S_FALSE,E_FAIL

    _GetCount()); return E_FAIL; } } 调用的代码如下: // 被动关闭/关闭超时 void CTcpPort::EndClose(HRESULT reason) {...S_OK是COM服务器返回正确 S_FALSE是COM服务器返回错误,不过这个错误是可以不处理的,不影响程序正常运行。只是结果不是想要的 E_FAIL是必须处理的错误。...返回E_FAIL,是告诉调用程序--某些地方出错,必须进行处理。否则,程序不能进行下去了。 返回S_FALSE,不是表示出现错误。 而S_OK和S_FALSE,则程序逻辑的不同表示。...调用程序只需对返回的S_OK和S_FALSE进行判断,然后决定程序的走向。 最主要的误解是由S_FALSE的名称带来的。    ...当自己写的函数接口返回值为HRESULT的时候,如果想要指明其出错,并且必须被处理时,应返回E_FAIL。

    1K10

    ATL源码学习2---聚合的支持

    1.COM组件聚合由来      聚合源自组件重用。当有两个组件A和B,他们分别实现了自己的接口IA和IB。...这时候有两种做法:一种是客户程序创建B对象,还有一 种方法是A组件内部创建B组件,然后客户通过某种途径调用B的接口方法。     ...ATL对聚合的内部组件的支持 ATL通过CComCreator2模板类以及和聚合相关的宏来支持聚合。...同样,如果组件仅支持聚合,那么T1就是CComFailCreatorE_FAIL>,创建时直接返回E_FAIL。      CComAggObject提供了两个IUnknown的实现。...另外也可以使用CComPloyObject来支持组件聚合。 3.ATL对聚合的外部组件的支持 ATL通过以下的宏来支持外部组件聚合其他组件的接口。

    94120

    使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题

    使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 发布于 2018-07-21 13:51...这不是欺骗,是真的具备了对早期系统的兼容性。 ? 于是,一些广泛使用的 UWP 应用终于不用各种自己写控件来兼容低版本的 Windows 10 了。...当然除了在 XAML 中,也可以在 C# 代码中使用库中的新 API。 解决意料之外的错误 一切可以那么顺利?...=0x80004005 Message=Error HRESULT E_FAIL has been returned from a call to a COM component....欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布

    4.1K10

    CoCreateInstance调用返回代码0x80040154的一种解决方法

    (3)LOGO资源使用Windows自带的解码库来进行解码,也就是Windows Image Component(WIC).       这么一思考,还是挺靠谱的。...在另外一台Win7机器上测试时,缩略图中并没有出现想象中的LOGO。一看日志文件,发现一直在报:CoCreateInstance()调用返回0x80040154。...也就是说COM类并没有注册,在注册表\HKEY_CLASSES_ROOT\CLSID\下面也就没有类ID了。我们程序中使用了WIC组件来解码图片,那么难道是WIC组件类没有注册吗?      ...再一想,开发时采用的一直是Windows10,可以正常运行。到了Windows7上为啥就不行了呢?难道是WIC在Windows7上不支持?...而这个GUID在Windows7上是不存在的(搜索注册表即可看到结果): ? ?       自然CoCreateInstance()调用就会返回0x80040154了。

    3.1K100

    WPF 已知问题 包含 NaN 的 Geometry 几何可能导致渲染层抛出 UCEERR_RENDERTHREADFAILURE 异常

    核心原因是在 CShapeBase::GetCachedBounds 对 Geometry 的 Bounds 进行校验失败,因此导致此方法返回了 WGXERR_BADNUMBER 错误。...接下来我将细细告诉大家这个调用链是如何一步步使用错误的上层业务代码传入的 Geometry 数据,获取到错误的参数。...先看一下最开始投毒的逻辑,在 PathGeometryWrapper.cpp 定义的 GetStartPoint 方法,返回了本文使用的代码里面传入的包含 NaN 的点的值,如以下代码,拿到的 m_pFigure...在本文的例子代码里,其实也进入了这个分支,调用堆栈如下 wpfgfx_cor3.dll!...记得替换 csproj 文件的 C:\lindexi\Code\WPF 为你的 WPF 文件夹 当前的 WPF 在 https://github.com/dotnet/wpf 完全开源,使用友好的 MIT

    1.2K10

    dotnet 读 WPF 源代码笔记 插入触摸设备的初始化获取设备信息

    \src\PresentationCore\System\Windows\Input\Stylus\Wisp\WispLogic.cs 的 HandleMessage 将获取 Windows 消息,代码如下...-A999-940F526219C2 组件只是 WPF 用的,而不是系统等给的接口 实际调用底层的代码是在 PenImc 层的 C++ 代码,但 PenImc 层的 C++ 代码只是一层转发调用而已,换句话说...,如果使用 C# 调用底层的系统的组件也是完全可以的 如上面代码通过 GetTabletCount 方法获取当前的触摸设备,此方法是通过 COM 调用到在 PenImc.idl 文件定义的 GetTabletCount...HRESULT 的值,如果失败了,将会调用 CLEANUP 标签的内容。...接口调用,实际使用的就是系统提供的 ITabletManager 组件 在底层系统组件,先调用 ITabletManager 的 GetTabletCount 方法 获取触摸设备数量,然后遍历触摸设备序号拿到

    84910

    COM学习(四)——COM中的数据类型

    上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用。...但是根据那套规则,只能识别接口,并调用没有参数和返回类型的接口,毕竟不同语言里面的基本数据类型不同,可能在VC++中char * 就表示字符串,而在Java或者c#中string是一个对象,二者的内存结构不同...HRESULT类型: 在COM中接口的返回值强制定义为该类型,用于表示当前执行的状态是完成或者是出错,这个类型一般在VC中使用,别的语言在调用时根据接口的这个值来确定接下来该如何进行。...一般在COM的调用者看来,有的时候只要最高位不为0就表示成功,这个时候可能会继续使用,所以在我们自己编写组件的时候要根据具体情况选择返回值,不要错误了就返回S_FALSE,其实我们看它的定义可以知道它是等于...为了简化操作,COM中也对它进行了一个封装——_variant_t,该类型可以直接使用任何类型的数据对其进行初始化操作。

    1.5K30

    混淆漏洞CVE-2017-0213技术分析

    相信大家对Windows的组件对象模型(COM) 都已经非常熟悉了。而DCOM可能相对来说要陌生一些。DCOM是 分布式的COM, 类似于CORBA, 也就是说调用的COM 可以在远程主机上。...看一下PREMQIRESULT的定义 typedef struct tagREMQIRESULT { HRESULT hResult; STDOBJREF std; } REMQIRESULT;...不难看出,IRemUnknown::RemQueryInterface 只是返回了对象的部分信息,而IRemUnknown2::RemQueryInterface2返回了整个对象的信息。...背景知识: 如果将COM 接口注册PSOAInterface或者PSDispatch后,oleaut32.dll 会查找注册的Type Library信息(存放在注册表中),如果找到的话,将调用LoadTypeLibrary...如果调用其 IBackgroundCopyJob::SetNotifyInterface(IUnknown *pNotifyInterface) 并传入一个精心构造的COM 接口,引发类型混淆,便可利用该漏洞来加载一个

    2.2K100

    c#中开发ActiveX的学习笔记

    严格意义上讲,c#是不能生成纯正ocx控件的,我们在vs.net中新建项目时,也找不到专门的"ActiveX项目"新建项,最多也只就能新建"类库"得到一个dll而非ocx(因此我们也无法用传统的regsvr32...来注册该dll),但是c#能开发com组件,activeX控件本质上讲跟com是一类技术,所以用c#开发"能够让网页调用的com类库"还是可行的。...不要修改 (5)新建一个:Windows Forms-->“用户控件”,我们的主要逻辑就写在这里(还可以在它上面随便放置其它windows常用控件,跟winForm开发一样),不过首先要修改类定义,让其实现我们刚才定义的接口...#endregion这一段的内容是固定的,不要修改,其它内容根据自己的业务要求自行修改,另外类前面要加上Guid的标识,以便网页调用时,能用CLSID="xxx"来调用 基本上这样弄完后,就可以在网页中...,用类似下面这样的代码来本机调用了: 注意:c#定义的public方法,如果想直接让js调用,只能返回string,DateTime,int,double这一类基本值类型,其它返回类型比如array,object

    1.8K50

    visual studio 2012 的制作ActiveX、打包和发布

    ActiveX控件Demo 新建一个Window窗体控件库项目 在自动生成的UserControl1页面上添加一个button 点击事件里我们只弹出一个MesageBox private...一是查询ActiveX组件是否实现了IObjectSafety接口,并且 返回脚本安全;二是查询ActiveX组件是否在注册表的Component  Category Manager里表明自己实现了 CATID_SafeForInitializing...ProgId里的ActiveXDemo.UserControl1是我自己工程里的,修改成你自己的 gui生成是在 菜单 工具 下边 打开项目属性, 在应用程序里 点击程序集信息 勾选 使程序集COM可见...在生成里边,勾选  为Com互操作注册 做到这里我们的ActiveX控件就做完了接下来我们把它发布 先是把它打包 Vs2012 打包我之前有些不同 新项目——其他项目 安装和部署 选择application...ok 因为我们的demo就一个dll所以不用再有别的操作 如果想修改一下安装的窗体可以在Installation Interview里设置 在Express\DVD-5\DiskImages\DISK1

    93190

    在操作系统重启后恢复应用程序的工作状态

    这是自 Vista 以来就提供的功能——Restart Manager。 ---- 应用程序实现这一功能只需要调用 RegisterApplicationRestart 即可。...传入两个参数: 重启后使用的命令行参数(例如当前正在打开的文件,以及正在阅读或编辑的位置) 决定是否进行重启的限制标记(任何时候都能重启还是在某些条件下关掉重启功能) 我封装了以下这个函数的调用并将其放到...)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa373347) /// ...codes. /// - E_FAIL: Internal error. /// - E_INVALIDARG: The specified command line...) Restart Manager Support For Windows Application - CodeProject c# - Restart a crashed program with RegisterApplicationRestart

    2.9K10
    领券