那位提供一个用C++编写COM的例子

WQ 2003-07-16 11:27:43
那位提供一个用C++编写COM的例子
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2003-10-31
  • 打赏
  • 举报
回复
潘老师的书上就有
rockrabbit 2003-10-31
  • 打赏
  • 举报
回复
谢谢,我也比较感兴趣。
nilm 2003-07-16
  • 打赏
  • 举报
回复
http://www.codeproject.com/com/com_server_without_mfc_atl.asp
WQ 2003-07-16
  • 打赏
  • 举报
回复
不用MFC和ATL
清泉ys 2003-07-16
  • 打赏
  • 举报
回复
http://www.vchelp.net/vchelp/type.asp?class_id=1&type_id=29
BoxFan 2003-07-16
  • 打赏
  • 举报
回复
//IServer.h
#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;
};

// {76CFA0E6-60B0-4854-9A33-9FD3EC6E2494}
static const IID IID_IX =
{ 0x76cfa0e6, 0x60b0, 0x4854, { 0x9a, 0x33, 0x9f, 0xd3, 0xec, 0x6e, 0x24, 0x94 } };
// {C35BDC46-8F67-4ffc-969C-942F64E98725}
static const IID IID_IY =
{ 0xc35bdc46, 0x8f67, 0x4ffc, { 0x96, 0x9c, 0x94, 0x2f, 0x64, 0xe9, 0x87, 0x25 } };
// {F8F1980F-6075-4e06-83F5-C01A399B4130}
static const IID IID_IZ =
{ 0xf8f1980f, 0x6075, 0x4e06, { 0x83, 0xf5, 0xc0, 0x1a, 0x39, 0x9b, 0x41, 0x30 } };

class CA:public IX,public IY
{
public:
//IUnknown Implement
virtual HRESULT __stdcall QueryInterface(const IID &iid,void **ppv);
virtual ULONG __stdcall AddRef(){return 0;}
virtual ULONG __stdcall Release(){return 0;}

//Interface Implement
virtual void __stdcall Fx(){cout<<"FX"<<endl;}
virtual void __stdcall Fy(){cout<<"FY"<<endl;}
};
//IServer.cpp
#include "StdAfx.h"
#include "IServer.h"

extern void trace(char *pMsg);

HRESULT __stdcall CA::QueryInterface(const IID &iid,void **ppv)
{
if (iid==IID_IUnknown)
{
trace("QueryInterface return pointer to IUnknown");
*ppv=static_cast<IX*>(this);
}
else if (iid==IID_IX)
{
trace("QueryInterface return pointer to IX");
*ppv=static_cast<IX*>(this);
}
else if (iid==IID_IY)
{
trace("QueryInterface return pointer to IY");
*ppv=static_cast<IY*>(this);
}
else
{
trace("QueryInterface return pointer to null");
*ppv=NULL;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}


这是我学习com时的例子
Skt32 2003-07-16
  • 打赏
  • 举报
回复

转载:

#include <iostream>
#import "scrrun.dll" raw_interfaces_only
int main()
{
CoInitialize(NULL);
{
try
{
Scripting::IFileSystem3Ptr fs;
fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
Scripting::IFolderPtr folder;
fs->GetFolder(_bstr_t("c:\\temp"),&folder);
_variant_t vsize;folder->get_Size(&vsize);
std::cout<<"c:\\temp size:"<<(long)vsize<<" bytes"<<std::endl;
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
std::cout<<"Get directory size via FileSystemObject, by masterz"<<std::endl;
std::cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<<std::endl;
std::cout<<"Description:"<<(LPCTSTR)bstrDescription<<std::endl;
}
}
CoUninitialize();
return 0;
}

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧