OLE接口用法

原创 2012年03月30日 17:57:33

转载请标明是引用于 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;
}


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

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

所有OLE接口

比较有用,记录下来供查阅 常规 函数: lUnknown 目的: 控制的接口协商的对象生存期。普遍存在的任何组件,而不考虑实现。QueryInterface 公开传入的接口。  函数:...

OLE DB 访问接口 "SQLNCLI" 返回了消息

OLE DB 访问接口 "SQLNCLI" 返回了消息--转  (2009-02-25 20:08:02) 转载▼ 标签:  杂谈 分类: SQLSERV...

解决"链接服务器 '(null)' 的 OLE DB 访问接口 'STREAM' 返回了对列 '[!BulkInsert].fieldname' 无效的数据"的一种替换方法

最近在合并两个SQL Server数据库的数据时不幸发生了这种错误,数据只能导入1433条,而其余的上万条数据都无法导入。   我的环境是SQL Server2008 sp1下,使用SQL Serv...

所有OLE接口

比较有用,记录下来供查阅 常规 函数: lUnknown 目的: 控制的接口协商的对象生存期。普遍存在的任何组件,而不考虑实现。QueryInterface 公开传入的接口。  函数:...

链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务

一、 问题现象 在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "没有活动事务。"。 ...

股票卡接口程序OLE版

  • 2009-05-05 19:22
  • 10KB
  • 下载

Java 接口,继承 用法意外体会。

一个类只可以继承一个类, 一个接口却可以继承多个接口。 父类的方法,子类继承后如果重写。则创建子类对象后使用该方法调用的是子类中的该方法。 否则,即没有修改父类里的方法,调用的就仍是父类方法。 ...

rmi远程接口用法及其实例

Java RMI之HelloWorld篇   Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)