• 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 > 我想找到一个最简单的COM源代码例子。

我想找到一个最简单的COM源代码例子。

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

佚名通过本文主要向大家介绍了钱是万恶之源的例子,钱不是万恶之源的例子,控制传染源的例子,源代码例子,水是生命之源的例子等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 我想找到一个最简单的COM源代码例子。
描述:

#include <unknwn.h>
class MyObject:public IUnknown
{
public:
  virtual HRESULT STDMETHODCALLTYPE QueryInterface(
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
  virtual ULONG STDMETHODCALLTYPE AddRef(void);
  virtual ULONG STDMETHODCALLTYPE Release(void);
  MyObject();
  ~MyObject();
  ULONG m_Count;
};
GUID LIBID_Server = {0x8F4CFFB4, 0xF45C, 0x4FFD,{ 0xB5, 0x16, 0x65,0xD5, 0x3E, 0xF2,0xB7, 0xB7} };
MyObject::MyObject()
{
  m_Count=0;
}
MyObject::~MyObject()
{
  //Release();
}
HRESULT STDMETHODCALLTYPE MyObject::QueryInterface(
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
{
  IUnknown* pI;
  *ppvObject=static_cast<MyObject *>(this);
  pI=this;
pI->AddRef();
  return S_OK;
}
ULONG STDMETHODCALLTYPE MyObject::AddRef(void)
{
  return 2;
}
ULONG STDMETHODCALLTYPE MyObject::Release(void)
{
  return 1;
}
ULONG __stdcall Thread(void *)
{
  DWORD dwRegister;
  MyObject my;
  CoInitialize(NULL);
  HRESULT hr=CoRegisterClassObject(LIBID_Server,
    static_cast<IUnknown *>(&my),
    CLSCTX_LOCAL_SERVER,
    REGCLS_MULTIPLEUSE,
    &dwRegister);
  if(SUCCEEDED(hr))
  {//显示
     MessageBox(...);
  }
  else {CoUninitialize();return 0;}
  MSG msg ;
while (::GetMessage(&msg, 0, 0, 0))
{
::DispatchMessage(&msg) ;
}
  CoUninitialize();
  MessageBox(...)
  return 0;
}
上面的代码中,线程执行的时候
CoInitialize->CoRegisterClassObject->MyOjbect::AddRef->CoUninitialize->MyOjbect::QueryInterface->MyOjbect::AddRef
然后报pure virtual function called纯虚函数调用,怎么回事?我的代码有错吗?
请各位高手指点,最好提供最简单的COM例子。


解决方案1:

VC6 -> 新建 ATL COM 工程 -> 缺省选项 FINISH -> Insert -> ATL 对象 -> Simple Object -> 缺省选项 FINISH -> 右键点接口 -> add method -> 输入方法名 -> OK
就会生成一个最简单的COM

解决方案2:

推荐阁下去个网站:www.codeproject.com
或者www.codeguru.com(都是国外的)
上面有专门讲述COM/COM+及ATL编写COM的专题,非常经典的网站,相信你会喜欢!

解决方案3:

http://www.john.findlay1.btinternet.co.uk/OLE/comlib.zip
是用c语言 写的com  ,更简单啊
用lcc编译

解决方案4:

楼主啊,难道我网站上的那个com例子还不简单,是不是要我给你写一个只显示一个字符串的com阿

解决方案5:

我的网站上有你需要的技术资料
vc开发者 http://dever.6to23.com

解决方案6:

在vs7下简直不用写,不过我没有用属性化

解决方案7:

去vckbase找一个
csdn上也应该有的,耐心找

解决方案8:

#include <iostream.h>
#include <objbase.h>
void trace(const char* pMsg)
{
cout << pMsg << endl;
}
//Abstract interfaces
interface IX
{
virtual void __stdcall Fx1() = 0;
virtual void __stdcall Fx2() = 0;
};
interface IY
{
virtual void __stdcall Fy1() = 0;
virtual void __stdcall Fy2() = 0;
};
//Interface implementation
class CA : public IX, public IY
{
public:
//Implement interface IX.
virtual void __stdcall Fx1()
{
cout << "CA::Fx1" << endl;
}
virtual void __stdcall Fx2()
{
cout << "CA::Fx2" << endl;
}
//Implement interface IY.
virtual void __stdcall Fy1()
{
cout << "CA::Fy1" << endl;
}
virtual void __stdcall Fy2()
{
cout << "CA::Fy2" << endl;
}
};
//Client
int main()
{
trace("Client: Create an instance of the component.");
CA* pA = new CA;
//Get an IX pointer.
IX* pIX = pA;
trace("Client: Use the IX interface.");
pIX->Fx1();
pIX->Fx2();
//Get an IY pointer
IY* pIY = pA;
trace("Client: Use the IY interface.");
pIY->Fy1();
pIY->Fy2();
trace("Client: Delete the comonent.");
delete pA;
return 0;
}


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

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

  • 赠送例子源代码和详细说明文档!
  • 我想找到一个最简单的COM源代码例子。

相关文章

  • 2017-06-04 新建的一个MFCActiveXControlWizard,建立过程均是默认选项,未做任何操作,Build命令显示注册失败?
  • 2017-06-04 请问ocx的文件如何在另外一台机器上注册??
  • 2017-06-04 如何将一个程序进行打包?
  • 2017-06-04 为什么在我ATL工程里,对话框上只要一加上ListView,或TreeView,对话框就DoModal不出来了??
  • 2017-06-04 用MFC开发AcitveX控件默认生成一矩形界面如何修改
  • 2017-06-05 新手提问-关于COM实现中的宏
  • 2017-06-05 这又是什么错啊?
  • 2017-06-04 MTS/com+在win2003上的部署问题!
  • 2017-06-05 关于dll和lib的简单问题
  • 2017-06-04 在用COLEDATETIME时跟踪时发现在下面的地方出错。

文章分类

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

最近更新的内容

    • 关于把DLL插入另外一个进程的问题
    • 在DISPID_BEFORENAVIGATE2事件中如何判断是否为IFRAME事件?
    • win2k下的COM组件能否直接拿到WIN98下用
    • 关于管道的问题!
    • ATL简单对象不响应鼠标滚轮消息
    • 关于多线程写多文件的问题,妹愿以高分相赠!!!!!!
    • 用ATL做了一个IE的toolbar,怎么打包成一个很小的安装程序供用户下载阿?
    • 怎么编写控件的反安装程序啊
    • ¥¥急,求助:在COMBO控件中加入经过转换的ATL::CComBSTR变量,显示出来的是乱码?¥¥
    • 谁对dll比较熟一点,帮我一下

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

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