• 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 > 如下代码为什么错,改怎么修改!

如下代码为什么错,改怎么修改!

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

佚名通过本文主要向大家介绍了有如下代码,有程序代码如下,代码如下,伊豆钩型尺寸如下,如下等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如下代码为什么错,改怎么修改!
描述:

#include <iostream.h>
#include <objbase.h>
interface IX : IUnknown
{
virtual void __stdcall Fx() = 0;
};
interface IY : IUnknown
{
virtual void __stdcall Fy() = 0;
};
interface IZ : IUnknown
{
virtual void __stdcall Fz() = 0;
};
extern const IID IID_IX;
extern const IID IID_IY;
extern const IID IID_IZ;
class CA : public IX,
public IY
{
virtual HRESULT __stdcall QueryInterface(const IID & iid,void ** ppv);
virtual ULONG __stdcall AddRef(){return 0;};
virtual ULONG __stdcall Release() {return 0;}
virtual void __stdcall Fx(){cout<<"Fx"<<endl;}
virtual void __stdcall Fy() {cout<<"Fy"<<endl;}
};
HRESULT CA::QueryInterface(const IID & iid,void ** ppv)
{
/*
if(iid == IID_IUnknow)
{
cout<<"this is IID_IUnknown!"<<endl;
*ppv = static_cast<IX*>(this)
}
*/
if(iid == IID_IX)
{
cout<<"this is IID_IX";  
IX *ppv = static_cast<IX*>(this);
//*ppv = <>
}
else if(iid == IID_IY)
{
cout<<"this is IID_IY";
IY *ppv = static_cast<IY*>(this);
}
/*
else if(iid == IID_IZ)
{
cout<<"this is IID_IZ";
*ppv = static_cast<IZ*> (this)
}
*/
else
{
cout<<"no interface";
return E_NOINTERFACE;
}
// reinterpret_cast<IUnknown*>(*ppv)->AddRef();
// IUnknown * ppv = reinterpret_cast<IUnknown*>(*ppv);
//reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}
IUnknown * CreateInstance()
{
IUnknown * pI =  static_cast<IX*>(new CA);
pI->AddRef();
return pI;
}
static const  IID IID_IX = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x86}};
static const  IID IID_IY = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x87}};
static const  IID IID_IZ = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x88}};
int main()
{
HRESULT hr;
IUnknown * pIUnknown = CreateInstance();
IX * pIX = NULL;
hr = pIUnknown->QueryInterface(IID_IX,(void**)&pIX);
if(SUCCEEDED(hr))
{
cout<<"it is succeeded"<<endl;
pIX->Fx();
}
IY * pIY = NULL;
hr = pIUnknown->QueryInterface(IID_IY,(void**)pIY);
if(SUCCEEDED(hr))
{
cout<<"it is succedede"<<endl;
pIY->Fy();
}
IZ * pIZ = NULL;
hr = pIUnknown->QueryInterface(IID_IZ,(void**)pIZ);
if(SUCCEEDED(hr))
{
cout<<"it is succedede"<<endl;
pIZ->Fz();
}
else
{
cout<<"can not bad!"<<endl;
}
IUnknown * pIUnknownFromIY = NULL;
hr = pIUnknown->QueryInterface(IID_IUnknown,(void**)pIUnknownFromIY);
if(hr)
{
cout<<"sucess"<<endl;
if(pIUnknownFromIY == pIUnknown)
{
cout<<"pIUnknownFromIY == pIUnknown"<<endl;
}
else
{
cout<<"pIUnknownFromIY != pIUnknown"<<endl;
}
}
delete pIUnknown;
return 0;
}
请高手指点,小弟先谢!


解决方案1:

如下:我只改了我说的部分
#include <iostream.h>
#include <objbase.h>
interface IX : IUnknown
{
virtual void __stdcall Fx() = 0;
};
interface IY : IUnknown
{
virtual void __stdcall Fy() = 0;
};
interface IZ : IUnknown
{
virtual void __stdcall Fz() = 0;
};
extern const IID IID_IX;
extern const IID IID_IY;
extern const IID IID_IZ;
class CA : public IX,
public IY
{
virtual HRESULT __stdcall QueryInterface(const IID & iid,void ** ppv);
virtual ULONG __stdcall AddRef(){return 0;};
virtual ULONG __stdcall Release() {return 0;}
virtual void __stdcall Fx(){cout<<"Fx"<<endl;}
virtual void __stdcall Fy() {cout<<"Fy"<<endl;}
};
HRESULT CA::QueryInterface(const IID & iid,void ** ppv)
{
/*
if(iid == IID_IUnknow)
{
cout<<"this is IID_IUnknown!"<<endl;
*ppv = static_cast<IX*>(this)
}
*/
if(iid == IID_IX)
{
cout<<"this is IID_IX\n";  
*ppv = static_cast<IX*>(this);
//*ppv = <>
}
else if(iid == IID_IY)
{
cout<<"this is IID_IY";
*ppv = static_cast<IY*>(this);
}
/*
else if(iid == IID_IZ)
{
cout<<"this is IID_IZ";
*ppv = static_cast<IZ*> (this)
}
*/
else
{
cout<<"no interface";
return E_NOINTERFACE;
}
// reinterpret_cast<IUnknown*>(*ppv)->AddRef();
// IUnknown * ppv = reinterpret_cast<IUnknown*>(*ppv);
//reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}
IUnknown * CreateInstance()
{
IUnknown * pI =  static_cast<IX*>(new CA);
pI->AddRef();
return pI;
}
static const  IID IID_IX = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x86}};
static const  IID IID_IY = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x87}};
static const  IID IID_IZ = {0x32bb8321,0xb41b,0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x88}};
int main()
{
HRESULT hr;
IUnknown * pIUnknown = CreateInstance();
IX * pIX = NULL;
hr = pIUnknown->QueryInterface(IID_IX,(void**)&pIX);
if(SUCCEEDED(hr))
{
cout<<"it is succeeded"<<endl;
pIX->Fx();
}
IY * pIY = NULL;
hr =&

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

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

  • 如何编写如下代码,谢谢
  • 如下代码为什么错,改怎么修改!

相关文章

  • 2017-06-05 使用DLL时,release正常debug报错。
  • 2017-06-04 DOM如何得到FRAME中的内容?
  • 2017-06-04 假如有好书,有时间,在不是太熟练vc的基础上要多上时间搞好comatl并用他们开发急
  • 2017-06-04 BHO编程中invoke的问题
  • 2017-06-04 vc如何获取word中图片数据
  • 2017-06-04 怎样在IE的右键菜单中建子菜单?
  • 2017-06-05 VC写的ocx,嵌入WEB页,客户端自动更新后,浏览器自动关闭
  • 2017-06-05 键盘上的多媒体键如上一曲,下一曲键按下后,在98下不能识别
  • 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
  • 微信公众号

最近更新的内容

    • ATL中添加一个string属性
    • VS2008打包为安装文件包含第三方控件
    • DLL找不到指定的模块
    • 如将VC++生成的一个距阵256256传到VBActiveXDLL中处理,则DLL的接口函数如何编写?
    • 如何开发在C++Builder中使用的addin?
    • DLL中添加DIALOG出错
    • 怎样停止IE中flash的声音播放?
    • 紧急求救——关于vc++对matlab的调用(matcom)
    • 自己制作的BHO安装时360老是提示怎么解决
    • 我写的DCOM组件,在DCOMCNFG界面里面在位置选项卡中,关于“在这台计算机上运行应用程序”一项是灰的,无法选择

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

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