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接口详解

所有 OLE Api 和接口的目的 本页 摘要 详细信息 常规 初始化和内存管理 远程处理 自定义服务...
  • ljmwork
  • ljmwork
  • 2012年07月04日 13:48
  • 3110

因为链接服务器 "XXXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务

今天同事遇到这样一个问题: “因为链接服务器 “XXXX” 的 OLE DB 访问接口 “SQLNCLI10” 无法启动分布式事务”。 就跑来问我啦。大致的情况就是在2台服务器时间使用...
  • u012843100
  • u012843100
  • 2017年08月04日 18:23
  • 429

SQL Server 解决 "无法执行该操作,因为链接服务器 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务"

在跨网段的两台服务器间建立了链接服务器,读取数据正常,但是当用分布式事务更新时,提示"无法执行该操作,因为链接服务器 "XXXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事...
  • xxyj6450
  • xxyj6450
  • 2012年11月28日 11:40
  • 7138

链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OleDb.12.0" 报错。提供程序未给出有关错误的任何信息。

【错误信息】 消息 7399,级别 16,状态 1,第 1 行 链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OleDb.12.0" 报错。提供程序未给出...
  • wonsoft
  • wonsoft
  • 2012年07月23日 12:58
  • 40802

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

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

sql server 2008链接服务器的访问接口缺少 "Microsoft.Ace.OleDb.12.0" 接口 怎么办?

前面机子坏了 重装了64位的win7系统 然后装了32位的office 64位的sql server 2008 发现sql server 2008 没有 "Microsoft.Ace.OleDb...
  • zhouhaiqing0905
  • zhouhaiqing0905
  • 2014年02月14日 22:41
  • 3612

OLE DB访问接口“MICROSOFT.JET.OLEDB.4.0”配置为在单线程单位模式下运行,所以该访问接口无法用于分布式

OLE DB访问接口“MICROSOFT.JET.OLEDB.4.0”配置为在单线程单位模式下运行,所以该访问接口无法用于分布式数据库操作excel时遇到的以上问题的解决方法 解决方法: 我的环境:...
  • qq_31117007
  • qq_31117007
  • 2015年12月24日 00:40
  • 1309

链接服务器'(null)'的OLE DB访问接口'STREAM'返回了对列 '[!BulkInsert]

问题: 向SQL Server2005里导入数据是出现错误“SQL 错误描述为: 链接服务器 '(null)' 的 OLE DB 访问接口'STREAM' 返回了对列 '[!BulkInsert]....
  • chenguang79
  • chenguang79
  • 2014年09月11日 08:42
  • 3884

无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

SQL Server 与 Excel之间导数据时候执行SQL遇到问题 执行如下SQL语句 select * from openrowset('Microsoft.Jet.OLEDB.4.0', ...
  • gqltt
  • gqltt
  • 2013年03月12日 16:22
  • 1500

64位Win7中导入excel提示“因为 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。”

64位Win7中导入excel提示“因为 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。” 主要原因是因...
  • dxnn520
  • dxnn520
  • 2013年11月21日 01:06
  • 15788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OLE接口用法
举报原因:
原因补充:

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