OLE接口用法

2023-10-31

转载请标明是引用于 http://blog.csdn.net/chenyujing1234

 例子代码:(编译工具:VS2005)

http://www.rayfile.com/zh-cn/files/4468c85c-7a4e-11e1-8329-0015c55db73d/

 

// 第一步得初始化COM环境
	HRESULT hr = CoInitialize(NULL);
	if (FAILED(hr)) 
	{
		return -3;
	}

// 第二步是获得接口 IDccMan
	hr = CoCreateInstance(CLSID_DccMan, NULL, CLSCTX_SERVER, IID_IDccMan, (LPVOID*)&g_pDccMan);
	if (FAILED(hr)) 
	{
		
		return -1;
	}

 


 

	// Create new notification object.
	g_pDanSink = new DanDccSink(hWnd, g_pDccMan);
	if (g_pDanSink)
	{
		// 第三步: 查询IDccManSink的接口
		g_pDanSink->QueryInterface(IID_IDccManSink, (void **)&pdms);

		// 这里调用后会自动调用OnLogActive函数
		g_pDccMan->Advise(pdms, &g_Context);
	}


 

g_pDanSink->QueryInterface(IID_IDccManSink, (void **)&pdms);,

1、会调用DanDccSink::QueryInterface,

STDMETHODIMP DanDccSink::QueryInterface(REFIID riid, LPVOID * ppvObj) 
{
	if (IID_IUnknown == riid || IID_IDccManSink == riid)
	{
		*ppvObj = (IDccManSink*)this;
	}
	else 
	{
		*ppvObj = NULL;
		return E_NOINTERFACE;
	}
	AddRef();

	return NO_ERROR;
}

它返回了(IDccManSink*)this;

 

 

// 第三步:这里调用后会自动调用OnLogActive函数
g_pDccMan->Advise(pdms, &g_Context);

1、它会先调用

STDMETHODIMP_(ULONG) DanDccSink::AddRef(THIS) 
{
	return (ULONG)InterlockedIncrement(&m_lRef);
}



 

2、然后又调用了一次QueryInterface,不过是返回了空接口.

3、调用调用

//
// The connection manager calls OnLogActive to indicate that the connection
// between the PC and the device is up and fully operational.
//
STDMETHODIMP DanDccSink::OnLogActiveC()
{

	return NO_ERROR;
}


4、然后又调用了一次QueryInterface,不过是返回了空接口.
5、然后调用

//
// When a connection is established, the connection manager calls OnLogIpAddr
// to notify you of the IP address of the connected device.
//
STDMETHODIMP DanDccSink::OnLogIpAddr(DWORD dwIpAddr) 
{
	TCHAR szIP[30];
	_stprintf_s(szIP, 30, TEXT("OnLogIpAddr: %02d.%02d.%02d.%02d"),
		(dwIpAddr & 0x000000ff),     (dwIpAddr & 0x0000ff00)>>8, 
		(dwIpAddr & 0x00ff0000)>>16, dwIpAddr>>24);

	//SendMessage(g_hwndStatusBar, SB_SETTEXT, (WPARAM)0, (LPARAM)szIP);

	return NO_ERROR;
}


下午很累了,具体原理下次补充.

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OLE接口用法 的相关文章

  • 如何在 SQL 中替换 PIVOT 中的 Null 值

    我有以下代码 我试图用零替换使用枢轴时出现的 Null 我执行了以下操作 但它说 ISNULL 附近的语法不正确 我不确定我做错了什么 有什么建议请 select from tempfinaltable pivot ISNULL sum T
  • Mysql AVG 忽略零

    我需要对一列执行平均值 但我知道该列中的大多数值都为零 在所有可能的行中 只有两行可能具有正值 我如何告诉 mySQL 忽略零并仅平均实际值 假设您可能不想完全排除此类行 也许它们在您想要聚合的其他列中具有值 SELECT AVG NULL
  • PDO 和 IS NOT NULL 函数

    我是 PDO 新手 我想知道是否有相当于 mysql 语句的语句来检查参数是否不为空 例如 SELECT FROM table WHERE param IS NOT NULL 我试过这个 pdo gt prepare SELECT FROM
  • 使用 pymongo 查询空字段

    我想使用 python 查询 mongo 中的空字段 但是它很难处理单词 null 或 false 它要么给我错误 它们在 python 中未定义 要么在 mongo 中搜索字符串 null 和 false 这两种情况我都不希望发生 col
  • C 中的 NULL 是否需要/定义为零?

    在我的 GCC 测试程序中 NULL 似乎为零 但维基百科说NULL只需要指向不可寻址的内存 有编译器做吗NULL非零 我很好奇是否if ptr NULL 是比更好的练习if ptr NULL is guaranteed to be zer
  • 在云服务器中运行 python 脚本的最简单方法是什么?

    我有一个网络爬行 python 脚本 需要几个小时才能完成 并且无法在我的本地计算机上完整运行 有没有一种方便的方法可以将其部署到简单的 Web 服务器 该脚本基本上将网页下载到文本文件中 如何最好地实现这一点 谢谢 既然你说性能是一个问题
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • PHP 构造函数返回 NULL

    我有这个代码 是否有可能User对象构造函数以某种方式失败 以便 this gt LoggedUser被分配了一个NULL构造函数返回后值和对象被释放吗 this gt LoggedUser NULL if SESSION verbiste
  • SQL - 用 varchar 替换 is null 整数

    我正在尝试用新的列替换列varchar如果 select 语句中存在空值 则为字符串 personid ISNULL personid no person 我不想更新它 只是在查询结果中将值显示为 无人 但我收到一条错误消息 将 varch
  • 块执行后变量返回 null

    我正在调度一个队列来在单独的线程上下载一些 flickr 照片 在 viewWillAppear 中 当我记录块内数组的内容时 它完美地显示了所有内容 dispatch queue t photoDowonload dispatch que
  • 如何删除非空约束?

    假设创建了一个表 如下所示 create table testTable colA int not null 您将如何删除非空约束 我正在寻找类似的东西 ALTER TABLE testTable ALTER COLUMN colA DRO
  • SQL Server 不使用索引将日期时间与非空进行比较

    我有一个与其他任何表都不相关的简单表 它有一个非 PK 列 它是一个日期 我已经为该列创建了一个非聚集索引 如果我提出这个查询 select from table where datecolumn is not null 但如果我删除 no
  • 无法在 JavaScript for 循环中读取 null 的属性“长度”

    我正在尝试制作一个像 Stack Overflow 那样的 Markdown 编辑器 如果我实际上没有在文本区域中键入星号和包含短语的 http 我会收到标题中列出的此错误 如果我只输入包含星号的短语 则错误指的是这一行 if linkif
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 通过 NULL 指针访问类成员

    我正在尝试 C 发现下面的代码非常奇怪 class Foo public virtual void say virtual hi std cout lt lt Virtual Hi void say hi std cout lt lt Hi
  • 在出错之前如何检查 nilClass 的未定义方法?

    我目前正在使用以下内容 20 p Status p 但是 我仍然收到以下错误 ActionView TemplateError undefined method status for nil NilClass on line 20 of a
  • 使用 rpy2 将 NULL 从 Python 转换为 R

    在 R 中经常NULL值用作默认值 使用 Python 和 RPy2 如何显式提供NULL争论 None不可兑换 NotImplementedError 字符串 NULL 只会被转换为字符串 并在执行过程中导致错误 采取以下示例 使用tsi
  • PostgreSQL 无法从服务器接收数据:软件导致连接中止 (0x00002745/10053)

    我尝试在 pgAdmin 中建立与 PostgresQL 服务器的连接 我总是收到这样的消息 could not receive data from server Software caused connection abort 0x000
  • 在 C++ 中检查空指针的首选方法是什么?

    选项A if NULL pSomethingColumn Yes we use Yoda conditions if NULL pSomethingColumn Or if pSomethingColumn if pSomethingCol
  • 如何从 f# 返回一个空元组到 c#? [复制]

    这个问题在这里已经有答案了 我有这个类型正确的 C 函数 static System Tuple

随机推荐

  • React性能优化的8种方式了解一下

    react凭借virtual DOM和diff算法拥有高效的性能 除此之外也有很多其他的方法和技巧可以进一步提升react性能 在本文中我将列举出可有效提升react性能的几种方法 帮助我们改进react代码 提升性能 但是我们不必一定要在
  • 记一次Mac挖矿病毒的处置

    title 记一次Mac挖矿病毒的处置 前言 网络安全圈一年一度的叉叉行动的前期准备过程中 在客户现场进行失陷主机监测和处置 通过态势感知发现某台终端主机有每五分钟向矿池 43 249 204 183 8888 发起一次连接请求的情况 态势
  • Python +selenium 实现自动校园网页登录 (Firefox)

    目的 通过分析页面 实现校园网自动输入账号密码 点击登录的操作 环境部署 win10 Firefox 87 64位 python 3 9 安装selenium pip install selenium 安装driver for firefo
  • 小红书评分8.7(从零开始学Python),入门新手必看

    前言 Python 是一种面向对象 解释型计算机程序设计语言 由 Guido van Rossum 于 1989 年底发明 第一个公开 发行版发行于 1991 年 Python 语法简洁而清晰 具有丰富和强大的类库 它常被昵称为胶水语言 能
  • window10基于WSL,通过ppa快速搭建LNMP环境,打造thinkphp6+swoole+docker开发环境(php8.0,对其他版本也适用)

    安装WSL2和UBUNTU 换源 两种方式都行 不过改之前都要记得备份 1 一行语句搞定 sudo sed i s archive ubuntu com mirrors ustc edu cn g etc apt sources list
  • PLSQL环境配置详细步骤

    下载PLSQL和instantclient 配置PLSQL 打开plsql 点击取消按钮 会进入主界面 点击配置 有的版本是选择Tools 首选项 第一个选项 选择Oracle client 安装的主目录D PLsql InstantCli
  • 软件测试与质量 第一章

    目录 一 什么是软件测试 1 1 测试目的 1 2 测试内容 手段和过程 1 2 1 手工动态测试涉及的工作 1 2 2 静态检查 1 2 3 自动化动态测试系统涉及的工作 1 2 4 软件测试的流程 1 3 小结 1 4 软件测试的分类
  • UE4 C++(20) UnrealPak打包和打补丁

    12 27 2020 文章目录 前言 打包 Package 资源类型 执行打包命令 HotPatcher插件 获取资源信息 GetAssetData 路径转换 ConvLongPackageNameToPackagePath 获取资源GUI
  • 最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    作者 STzen 链接 https www jianshu com p 683ffde4f3a3 来源 简书 最小生成树 列子引入 如图假设v0到v8表示9个村庄 现在需要在这9个村庄假设通信网络 村庄之间的数字代表村庄之间的直线距离 求用
  • 力扣刷题-47.全排列Ⅱ、深度优先搜索

    给定一个可包含重复数字的序列 返回所有不重复的全排列 深度优先搜索 DFS 深度优先搜索就是在每一步对每一种可能的选择一条道走到底 然后再回过头尝试另外一种选择 深度优先搜索的关键是要考虑 当前这一步 该如何做 至于 下一步 该怎么做和当前
  • 【Java】Java与C/C++的不同点总结

    Java是在C 的基础上发展而来 但是与C 还是有不同点的 总结如下 不同点 C 支持指针 而 Java 没有指针的概念 Java中起类似作用的是引用 C 支持多继承 而 Java 不支持多重继承 但允许一个类实现多个接口 Java 是完全
  • win10内网穿透实现远程桌面连接

    一 前情提要 在学校的时候曾经看到过同学在实验室用远程桌面控制宿舍自己的电脑 这样不仅能随时使用自己电脑上的文件 还省得把电脑带来带去又麻烦又重 当时也研究过 但没成功 这不新冠肺炎疫情导致开学时间一推再推 最近在家研究起了家庭NAS 无意
  • cesium入门系列(一)

    写在前面 近期开展cesium的入门学习 同时将学习的笔记记录下来 部分地方可能会很粗旷 后续会逐渐完善 一 登录cesium官网注册后获取token 很重要 二 html界面打开cesium的第一个界面 三维地球 cesium项目包准备
  • web前端开发程序员必须知道的HTML常⽤代码汇总

    html css代码 本设置 1 font size 字号 2 font style 字体格式 3 font weight 字体粗细 4 颜 属性color 本颜 注意使 页安全 超链接设置 text decoration 参数 参数取值范
  • 35:16. 最接近的三数之和

    题目 class Solution public int threeSumClosest vector
  • 近来总结

    近来总结 又是好久没写文章了 不能这样 感觉惰性真的会吞噬人的斗志 距离上篇文章又时隔十天了 不过话说回来 这段时间事情还是很多的 有时候就感觉在这么一个很小的外包公司怎么去提升自己的技术积累 小公司会不断的加工作 去看看技术贴 逛一逛Gi
  • QT队列的使用(QQueue)

    头文件 include
  • Linux中使用rm删除文件未释放磁盘

    原因 在Linux系统中 通过rm或者文件管理器删除文件 只是将它会从文件系统的目录结构上解除链接 unlink 也就是说只是删除了文件和系统目录结构的链接 如果文件在删除时是被打开的 有一个进程正在使用该文件 文件被进程锁定或者有进程一直
  • C语言函数之可变参数原理:va_start、va_arg及va_end

    说到C语言函数可变参数 我们最先想到的可能就是printf scanf printk了 在Linux 2 6 24 7内核源码里 printk函数原型如下 asmlinkage int printk const char fmt asmli
  • OLE接口用法

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 编译工具 VS2005 http www rayfile com zh cn files 4468c85c 7a4e 11e1 8329 00