关于追加MFC类(create by typeid)的疑惑

jfyy 2014-04-23 06:06:48
才接触com编程,下面的问题困扰了我好久,明白的人请帮解答下,谢谢!

1)在一个dll追加了一个派生CCmdTarget类,选中create by typeid。
2)追加一个void test()方法。
3)编译,imdl生成.h文件。查看该.h文件,该接口并没有test()方法。
    ITestClass : public IDispatch
{
};


后采用追加atl simple object class 方法,同样追加test()方法后,接口里就有test()方法。
    IPlus : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Test( void) = 0;

};


为什么采用atl追加类,导出h文件没有问题。而用mfc追加的类就有问题。
...全文
220 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jfyy 2014-05-06
  • 打赏
  • 举报
回复
生成的文件指的是imdl生成.h文件。我提出的问题是查看这个.h文件,发现其定义的接口并没有我追加过的test()方法。 Cw003333:你的意思是mfc开发com,不需要使用imdl生成.h文件,直接使用从TypeLib生成的包装类?
Cw003333 2014-05-06
  • 打赏
  • 举报
回复
dispinterface接口,从MFC的Typelib类库就可以直接转出.h文件,而且可以根据每个接口分别生成接口类的头文件 如果是自定义接口的话,import进来组件的dll或exe文件,编译后会生成一个.tlh文件,这个就是整个组件的头文件,包含了所有接口 对用户来说,你没有提供IDL文件,IDL文件信息编译到你最后的dll和exe文件中,你import进去,再编译,VS会导出到tlh文件中
Cw003333 2014-05-05
  • 打赏
  • 举报
回复
就我看见的这个代码中Test定义没有问题,你生成文件是指哪个文件呢?用MFC开发COM和ATL开发不同,项目本身不必要生成头文件的。你其它项目添加类的时候直接从TypeLib里面选你自己开发的类型库相应接口就可以生成头文件
jfyy 2014-04-28
  • 打赏
  • 举报
回复
我创建的工程是mfc dll工程。 (不是atl工程)
想从外部访问,如何添加接口方法? 下面内容copy的idl文件内容。接口里明明有test的方法,可生成的文件里就是没有这个接口方法。
//  Primary dispatch interface for TestClass

[ uuid(9B5D908E-E5CD-444E-86E6-CE3624A414BC) ]
dispinterface ITestClass
{
properties:
methods:
[id(1), helpstring("method Test")] void Test(void);
};

// Class information for TestClass

[ uuid(9B6D7A30-98D5-43CF-B58F-6BBBF041CDEA) ]
coclass TestClass
{
[default] dispinterface ITestClass;
};
[
uuid(DEA09BA8-E6C5-47B0-828F-3A74C64AE9CB),
helpstring("Man Class")
]
lis2012 2014-04-23
  • 打赏
  • 举报
回复
如果在atl的工程中添加 mfc类的话,添加的方法只能在工程内部访问类对象的方法,这个方法并不是 实现类(coclass)的接口方法,要从外部访问的话,就需要对接口添加方法才可以

3,245

社区成员

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

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