描述:
环境:ATL COM
问题描述:现有一个运行良好的COM组件,新的功能需要在原来的接口里面添加一个新的函数,我的做法如下:
1。在idl的接口里面添加了这个函数的定义。
2。实现类所在的h文件里面添加对应函数的声明。
3。实现类的cpp文件里面添加了具体的函数实现。
4。重新编译dll,先Unregister原来的组件,再Register新生成的dll。
错误症状:
1。调用接口的新函数的时候,抛出AccessViolation异常。
2。调用接口里面的其他函数正常。
我的函数声明和函数实现都是没有问题的,dll编译也正常。我怀疑是com注册的问题,新函数没有注册成功。
由于我对COM不是很熟悉,所以可能有一些基本的步骤错了或者是漏掉了,希望有经验的朋友帮忙看看。谢谢。
解决方案1:
应该是你接口或者什么地方加错了,接口新增函数是可以的。
要么就是你导入的头文件或tlb版本和dll不一致,用oleview看一下dll的路径是否是你最新的dll
1,先排除是否客户端问题,,可以用其它工具,比如DELPHI写客户端来调用.
2,看看是否函数里面具体代码有问题.
用容器看看,新的接口函数是否已经加上;
调试看看是哪一行引起的;
该错误一般是指针指向了非法地址或数组越界。
客户端也是VC写的吗?rebuild过没有?
解决方案5:我的意思是。你原来的接口已经在用的,不能再改了,应该再定义一个新的接口来实现新的功能,不是修改原来的接口