是否创建没有IDispatch支持的COM项目? [英] Creating a COM project without IDispatch support?
问题描述
我正在尝试编写示例COM.
VC ++ IDE提供了创建简单COM对象的向导.
但是,它始终创建具有IDispatch支持的COM对象.
由于某些原因,我需要创建一个实现以下IDL并具有以下要求的简单COM对象:
-必须是COM exe
-一定不能从IDispatch派生而只能是IUnknown
-必须是单身人士
Hi,
I am trying to write a sample COM.
VC++ IDE provides a wizard to create a Simple COM object.
However, it always creates the COM object with IDispatch support.
For some reasons, I need to create a Simple COM object implementing the following IDL with the following requirements:
-- Must be COM exe
-- Must not be derived from IDispatch but IUnknown only
-- Must be a singleton
// typelib filename: Sample.exe
[
uuid(94EE69BF-4387-4078-B33F-1E9B471D128E),
version(1.0),
helpstring("Sample 1.0 Type Library"),
)
]
// library Sample
{
importlib("stdole2.tlb");
// Forward declare all types defined in this typelib
interface ISample;
[
uuid(7CEBF979-C4EB-48eb-BE06-FBA1B4929FE7),
version(1.0)
]
coclass CSample
{
[default] interface ISample;
};
[
odl,
uuid(E3B868FC-7A58-4f28-B895-922D2BE7797F),
oleautomation
]
interface ISample : IUnknown
{
HRESULT _stdcall CreateTester([out, retval] IUnknown** ppTester);
HRESULT _stdcall Initialize();
HRESULT _stdcall Uninitialize();
HRESULT _stdcall get_Name([out, retval] BSTR* Name);
HRESULT _stdcall GetSettings([out, retval] IUnknown** ppSettings);
HRESULT _stdcall GetList([out, retval] VARIANT* VarList);
HRESULT _stdcall SetList([in] VARIANT VarList);
};
};
我使用VC ++向导创建了一个ATL COM项目,并试图从中剥离IDispatch.
但是,事实证明放弃这项工作太困难了.
有人可以写一个满足上述要求的COM项目吗?
谢谢.
-
HaeRim Lee
I created an ATL COM project this using VC++ wizard and tried to stripping off IDispatch out of it.
However, it turned out to be too difficult job to give up.
Can someone write a COM project satisfying the above requirements please?
Thank you.
--
HaeRim Lee
推荐答案
看看这篇文章:初学者教程:COM/ATL简单项目 [ ^ ]
您可以将其用作自己项目的基础.
Have a look at this article: Beginner''s Tutorial: COM/ATL Simple Project[^]
You could use it as a base for your own project.
这篇关于是否创建没有IDispatch支持的COM项目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!