小弟所做的COM库中,在逻辑上只有一个类A是允许用户创建,其他的只是接口。
这些接口指针,用户可以通过调用A的方法获得。
小弟对ATL不熟悉,只会用"ATL Object"向导,结果向导为每个接口都生成了一个类。
能够控制它只生成接口吗?如果是自己从接口interface xxx{...}继承的话,就需要自己做AddRef, Release, QueryInterface, ...,还有要自己做注册,注销,……,太麻烦了:)
这些接口指针,用户可以通过调用A的方法获得。
小弟对ATL不熟悉,只会用"ATL Object"向导,结果向导为每个接口都生成了一个类。
能够控制它只生成接口吗?如果是自己从接口interface xxx{...}继承的话,就需要自己做AddRef, Release, QueryInterface, ...,还有要自己做注册,注销,……,太麻烦了:)
查找工程中的OBJECT_ENTRY,将相应的代码去掉就可以了。
我已经去掉了,可是在注册表中还是注册了一个类,只是用户不能创建这个类的对象还有什么办法吗?谢谢
支持查询是否支持某文件后缀的接口
#pragma once#ifndef __CDIGUIDS_DEFINED
#define __CDIGUIDS_DEFINED#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif#include "rpc.h"
#include "rpcndr.h"#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif // __RPCNDR_H_VERSION__#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/EXTERN_C const CLSID CLSID_FileSourceCDI;
EXTERN_C const IID IID_ICDIExt;// interface ICDIExt, for extend of filter
// [unique][uuid][object]
MIDL_INTERFACE("413DBEFC-C09C-4f4f-A268-6020A4E41A61")
ICDIExt : public IUnknown
{
public:
// support this format extension?
virtual HRESULT STDMETHODCALLTYPE IsExtensionSupport(LPCOLESTR pszExt) = 0;
};
#endif
不就得了~~ 你将OBJECT_ENTRY删除,注册表中,当然还有信息.
因为那是由.reg决定的
想没有信息,删除.reg文件中的相关内容即可. 但是,我感觉你的问题好怪.
想要接口,不想要CoClass,
真的不太懂你的意图~~
不在dll中注册CoClass,那么CoClass的接口有什么用啊~~
光有接口,没有接口的实现类,你怎么实例化你的com对象呢.//纯虚类不能被实例化.
至少有一个实现类来实现你的接口.你定义接口后,只要在coclass里添加该接口,就应该不会有问题的.
对于第一种,我想你可先加入两个ATL对象,再编译一下,然后在一个对象上按右键,选"Implement Interface",然后在对话框中选种另个接口,即可在同一个对象上实现两个接口.第二种就更简单,不加"编译"步骤即可.个人愚见
调用其他CoClass的方法,必须聚合或者包容的. 在一个CoClass中实现多接口,自己在.idl文件中
添加描述、在.h和.cpp文件中,再简单的加入
:public ComInterface
COM_INTERFACE_ENTRY(IComInterface)