ATLVC 6.0环境下,VS里面类似。

ATL项目名称:TestAtl

接口:ITestInterface

实现类:CTestInterface

方法名称:Myfun

Errorcannot instantiate abstract class due to following members

warning:pure virtual function was not defined

 

1、 Add method以后编译连接出现

以上Error 或者 Warning

原因可能是参数类型不支持,例如用char* a可能会导致以上问题,换成BSTR a 就行了(有可能需要rebuild)。

2、1中的问题也可能真的是未实现必须的接口,一般是因为手动添加方法所致。

有方法声明的地方有这几处:

(1)---- TestAtl.idl—

interface 接口名 : IUnknown

{

[helpstring("method Myfun")] HRESULT Myfun (BSTR srcFile, BSTR desFolder);

……

};

(2)---- ITestInterface.h----

STDMETHOD(Myfun)(BSTR srcFile,BSTR desFolder);

(3)---- ITestInterface.cpp----

STDMETHODIMP CTestInterface:: Myfun (BSTR srcFile, BSTR desFolder)

{return S_OK;}

(4)---- TestAtl.h---- 注意 此处是系统自动添加的,不需要手动写。

ITestInterface: public IUnknown

{

public:

virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Myfun (

BSTR srcFile,  BSTR desFolder) = 0;

……

}

如果你想手动添加批量方法的话,(1)(2)(3)处对应添加就可以了,不知道具体位置可以到class view 右击接口add method 自动加一个 仿照着来。

3、如果想用智能指针的话在“ITestInterface.h”的include下面加上_COM_SMARTPTR_TYPEDEF(ITestInterface, __uuidof(ITestInterface)); 就行了。 后面就可以 使用ITestInterfacePtr了。

4、假如你的接口实现类里面继承了其他接口,编译连接出现文章开始提到的error和waring,那么你要右击你继承的接口转到定义,然后看他定义里实现了什么方法, 在你实现的接口里面同样要声明并且实现,格式与你自己的接口的方法格式是一样的。例如

class ATL_NO_VTABLE CTestInterface:

public CComObjectRootEx<CComSingleThreadModel>,

public CComCoClass<CNMMarkerSymbol, &CLSID_NMMarkerSymbol>,

public ITestInterface,//你自己的接口

public ISomeInterface//你继承的接口

{…………}

这时候你要右击ISomeInterface转到它定义的地方

struct __declspec(uuid("f3435802-5779-11d0-98bf-00805f7ced21"))

ISomeInterface: IUnknown

{

virtual HRESULT __stdcall FunA (BSTR a,BSTR b) = 0;//纯虚函数

virtual HRESULT __stdcall FunB ( ) = 0;

};

你要在

(2)---- ITestInterface.h----

STDMETHOD(Myfun)(BSTR srcFile,BSTR desFolder); //模仿这个函数

STDMETHOD(FunA)( BSTR a,BSTR b);

STDMETHOD(FunB)();

并在cpp实现

(3)---- ITestInterface.cpp----

STDMETHODIMP CTestInterface:: Myfun (BSTR srcFile, BSTR desFolder)

{return S_OK;}

实现也是模仿

STDMETHODIMP CTestInterface:: FunA (BSTR a,BSTR b)

{return S_OK;}

STDMETHODIMP CTestInterface:: FunB()

{return S_OK;}

总结一下第4部分,这里Myfun是你的接口所实现的方法,你的接口需要继承ISomeInterface,这个接口一共有俩方法(funA funB),在你的接口里(.h,.cpp)面都需要声明并且实现。至于怎么继承ISomeInterface接口,还需要加些代码,找个例子看看就行了。

5、为什么智能指针还需要 Release呢,智能指针不是不需要进行管理引用计数了吗,为什么还需要程序员来release?

原因是,智能指针对象在对象销毁时释放所指向的接口,但如果没有在函数退出前,你销毁了com库,那就需要提前来Release它

用Visual C++编写DLL,如果在new project时选了MFC DLL,而后又想写成Regular DLL,即拥有自己的DllMain()入口函数,则在build时会遇到类似如下的link错误:

1>uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in xxx.obj

此种连接错误在用DirectShow + MFC实现filter的时候必然会遇到:

"If you try to use MFC framework classes (CWinAapp-, CWnd- derived) in your AX filters, you end up with tons of error messages from the not-initialized MFC framework. To fix this several changes need to be done in the initialization functions (dllentry.cpp)."

要解决此类问题,有三种解决方案:

1)只需要在工程设置里面,把WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MSGBOX_EXPORTS,_WINDLL,_AFXDLL中的_USRDLL,删除,就可以正确编译了。

一般第一种就能解决!

转载于:https://www.cnblogs.com/sxw_cug/archive/2012/05/19/2508752.html

ATL 开发 COM 过程中的一些经验、问题总结相关推荐

  1. 【无标题】研究过程中的一些经验感悟

    基础研究过程中的一些经验感悟-- 关于"金字塔结构逻辑运用二值脉冲对简单图形处理"相关知识和方法的介绍 首先作者写这篇介绍还是感觉底气有点不足,毕竟知识储备有限.但是对于作者自己的 ...

  2. 在顶级游戏开发的过程中需要怎样的编程实力?

    做游戏技术主要讲究的是套路,以及对套路的掌握程度.比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细 ...

  3. 关于用DELPHI开发服务器软件中的一些经验

    保存 评价 游戏规则 免费注册 资料下载 关于本站 问题分类 编程问题 非技术题 富翁列表 我的信息 提出问题 在线富翁 富翁日历 笔记列表 我的笔记 写作笔记 全文检索 <专家门诊> / ...

  4. uniapp开发app过程中集成友盟统计

    uniapp在开发app过程中,需要集成友盟统计,可参考以下流程进行配置 友盟统计官网注册并获取appkey 单独创建安卓跟ios的应用,获取到appkey(这里以安卓为例) 配置manifest.j ...

  5. 软件开发的过程中, 一定需要简单设计?

    2017.7.4, 深圳, Ken Fang 前言: 简单设计只是写文档, 而不能指导开发, 这样的简单设计, 就只是在瞎折腾. 但是, 软件开发的过程中, 不做简单设计, 软件开发就永远做不好. 简 ...

  6. Eclipse开发调试过程中经常使用到的常见按钮

    在项目过程中一些刚刚入行的同学经常出现一些类似于"刚刚那个窗口怎么不见了"."我的控制台呢"这样的问题,总的来说就是对eclipse这个工具使用不熟练.于是我就 ...

  7. 大数据在开发的过程中,主要会遇到哪些难点?

    大数据开发的难点主要是监控,怎么样规划开发人员的工作?开发人员随随便便采集了一堆垃圾数据,并且直连数据库.短期来看,这些问题比较小,可以矫正.但是在资产的量不断增加的时候,这就是一颗定时炸弹,随时会引 ...

  8. 软件开发的过程中,这些文档你都用到了吗?

    导读: 做软件的目的就是要满足客户的需求,这个需求包括功能.外观.操作.时间及性能等各方面.那么,在软件开发过程中那部分最重要呢,程序员说"毋庸置疑,我编写的程序实现了客户提出的功能以及业务 ...

  9. 网站开发建设过程中所涉及到的技术问题应当如何面对?

    随着当下网络信息技术的迅速发展,几乎当下大部分国内企业都有属于自家的官方网站,也正是在网站如此普及的程度下,让我们意识到网站建设技术的重要性.那么在网站建设中所涉及到的技术上问题也有很多,下面我们可以 ...

最新文章

  1. win mysql 最大连接_常用的三种修改mysql最大连接数的方法
  2. CRLB Case Practice ( No.1 )
  3. H5视频之video.js播放rtmp直播源和hls直播源
  4. java mail urlname_javamail收发信件时,服务器,收发方的名称应该怎样设置才有效呢
  5. android webview js 交互框架,自定义android混合框架开发实践1:实现基础andorid和webview交互...
  6. 数据科学家必会的六大 NLP 技术!
  7. 别再瞎学 Python 了!
  8. 微信机器人开发SDK使用教程--删除朋友圈
  9. paip java.net.SocketException No buffer space available的解决办法及总结
  10. nxlog收集linux日志,Nxlog——日志采集神器简介
  11. C#System.Text.RegularExpressions.Regex使用
  12. dell云存储服务器,dell云存储服务器(戴尔存储服务器)
  13. dell笔记本屏幕进水有水印
  14. Java面向对象设计
  15. 5个方法助设计师保持创造力
  16. request无法获取到前端发送的form表单数据
  17. 【Windows批处理】常用命令解析
  18. Android SQLite 简单的使用步骤
  19. Java版的双色球买彩票程序
  20. javascript trim方法

热门文章

  1. React Native开发总结(二)
  2. ★LeetCode(196)——删除重复的电子邮箱(MySQL)
  3. ★LeetCode(669)——修剪二叉搜索树(JavaScript)
  4. 前端—每天5道面试题(7)
  5. windows 设置 rocketmq环境变量_RocketMQ 开篇
  6. 将房子卖了五百万,存在银行,靠利息能过日子吗?
  7. 新来的领导把我的职务免掉了,一年后,我要不要找领导聊聊?
  8. 为什么有人很容易的考上公务员?有的人考了三年都考不上?
  9. 有人说如果车速每小时超过120公里,爆胎时无法挽回是真的吗?
  10. 对AIOps架构框架比较