• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 怎样通过IUnknown返回记录集对象?

怎样通过IUnknown返回记录集对象?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了iunknown,iid iunknown,ajax返回对象,mybatis 返回对象,返回对象等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎样通过IUnknown返回记录集对象?
描述:

有一个已有的COM (msado15.dll)
我想做一个msado15.dll的代理COM,
interface IDemoOuter : IDispatch
{
HRESULT OpenConnect([in]LPSTR strConnect);
HRESULT ExecuteSql([in]LPSTR str/*要执行的SQL语句*/,[out] IUnknown *pUnk/*记录集对象*/);
}
//实现
STDMETHODIMP CDemoOuter::ExecuteSql(LPSTR strSql, IUnknown *pUnk)
{
pUnk=m_pUnkRecord;
_RecordsetPtr LocalRecord;
HRESULT hr=m_pUnkRecord->QueryInterface(LocalRecord.GetIID(),(void**)&LocalRecord);
if(FAILED(hr))
return NULL;
hr=LocalRecord->Open(strSql,(IDispatch*)m_pConnect,adOpenDynamic,adLockOptimistic,adCmdText); 
//此处的LocalRecord不是代表传过来的记录集对象吗?
return hr;
}
STDMETHODIMP CDemoOuter::OpenConnect(LPSTR strConnect/*连接串*/)
{
HRESULT hr=m_pConnect.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
return NULL;
try
{
hr=m_pConnect->Open((_bstr_t)strConnect,"","",adConnectUnspecified);
return hr;
}
catch(_com_error err)
{
CloseConnect();
return NULL;
}
}
//客户端调用
//打开表
void CTestDlg::OnOpenTable() 
{
try{
_RecordsetPtr m_Record;
HRESULT hr=m_Record.CreateInstance(__uuidof(Recordset));
if(FAILED(hr))
return;
myDB->put_DBRecord((IUnknown*)&m_Record);
myDB->ExecuteSql("select * from T1",(IUnknown*)&m_Record);
myDB->get_DBRecord((IUnknown**)&m_Record);
//以下略,显示m_Record的记录结果
//m_Record=0x0000000...
}
catch(_com_error err)
{
AfxMessageBox((char*)err.Description());
}
catch(...)
{
AfxMessageBox("无法捕获的错误(table)");
}
}
//最终目的,客户端得到记录集
//希望高手帮忙,QQ:360893574


解决方案1:

GetAgencyInfo([in] BSTR LogName, [out,retval] IDispatch **info)
STDMETHODIMP CCustomer::GetAgencyInfo(BSTR LogName, IDispatch **info)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
char sql[SQL_BUFFER];
sprintf(sql,"SELECT * FROM Agency WHERE ID IN(SELECT PID FROM Customer WHERE Customer.LogName=\'%s\')",B2S(LogName));
_RecordsetPtr pRecordSet=NULL,pRecordSetCl /> try {
pRecordSet.CreateInstance(__uuidof(Recordset));
pRecordSet->CursorLocation = adUseClient;
pRecordSet->Open(sql,szConnectString,adOpenKeyset,adLockOptimistic,adCmdText);
pRecordSet->PutRefActiveConnection(NULL);
pRecordSetClone = pRecordSet->Clone(adLockOptimistic);
pRecordSetClone->QueryInterface(IID_IDispatch, (void**)info);
pRecordSet->Close();
pRecordSet = NULL;
} catch ( _com_error &e ) {
_bstr_t wszSource(e.Source());
_bstr_t wszDescription(e.Description());
_bstr_t wszErrorMessage(e.ErrorMessage());
ATLTRACE(_T("%s\n"), (LPCTSTR)wszSource);
ATLTRACE(_T("%s\n"), (LPCTSTR)wszDescription);
ATLTRACE(_T("%s\n"), (LPCTSTR)wszErrorMessage);
}
return S_OK;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ATL项目中怎样建立继承于IUnknown的没有任何实现的基接口?
  • 关于IUNKNOWN的QueryInterface的实现问题
  • IUnknown作参数时怎么传参?
  • COM聚合时候对IUnknown有两个不同的实现
  • 继承IUnknown的接口,为什么在VB对象浏览中还是能看到?
  • IUnknown的Addref/release功能都类似,为什么还要用户去实现?
  • 接口在对IUnknown的继承过程中为什么不使用虚继承?
  • 请问怎么通过进程ID获得IUnknown接口?
  • 怎样理解“IUnknow即没有数据也没有函数,我们仅仅继承了接口”?IUnknown不是有3个函数声明吗?
  • 我做了一个ActiveX控件,在客户程序的函数中需要此控件的IUnknown做为参数,调用GetIDispatch()函数总出错,该怎么办?

相关文章

  • 2017-06-04 调用API:SHBrowseForFolder选择文件夹总是报错,为什么?
  • 2017-06-05 如何开始一个线程?
  • 2017-06-05 如何获取调用者的HMODULE?(内详)
  • 2017-06-05 一个进程里面,如果同时有80个线程运行,情况会怎样?
  • 2017-06-04 请教一个问题
  • 2017-06-05 vc调用vb编写的COM
  • 2017-06-05 如何让我的服务程序在winxp登录前运行?
  • 2017-06-05 我怎么在vc里面写的一个单独的功能模块发布成dll,供net调用呀?
  • 2017-06-05 线程句柄的信号量在什么时候会发生变化
  • 2017-06-05 用下面的脚本注册了一个插件之后,可以运行,但是为什么在注册表里找不到下列插件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于拦截文件操作的API的钩子程序求教:qq:55020921(再问)
    • 用户界面线程为什么无法达到预期的效果
    • MSXML使用:#import的时候不能no_namespace,为什么?
    • 求最新的dbghelph和dbghelplib
    • com+问题
    • 多线程程序中文件写日志的问题
    • 如何开始一个线程?
    • 急急急!!!请问哪有介绍用vc进行excel编程的资料或书籍?十分感谢!!!
    • Win2000,VC6:CreateProcess的局限?
    • ★★★关于DCom服务器★★★

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有