讨论ATL组件升级的问题 用VC6开发ATL COM组件,如何使接口改动后,原有的应用不用重新编译。注册表中好像有版本管理的机制,不知如何在代码中控制。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重新编译不要改clsid号码即可,另外对外接口要完全保留老的接口 clsid肯定是不变的,接口增加方法或属性后,有些应用比如Dephi还是要重新引用、重新编译才能正常使用组件。 我不太清楚delphi中使用组件的方法,但是,com组件只要二进制兼容,应该是不用编译就可直接使用的. 定义一个新的接口(通常是在老接口名的后面加个2随便看习惯),接口中要包含老接口的所有接口函数,当然在实现端就用老接口的一份实现.在新接口中加入你要升级的新的接口函数,或者是对老接口的函数的生机版(通常是在老接口函数名的后面也加个2,随便看习惯).老接口:interface ISample : IUnknown{ HRESULT DoSomething(); HRESULT Func();};新接口:interface ISample2 : IUnknown{ HRESULT DoSomething(); // 不改变这个函数还是使用老的实现. HRESULT Func(); // 不改变这个函数还是使用老的实现. HRESULT Func2(); // 新的函数对Func()的升级版本. HRESULT NewFun(); // 一个新的函数.} 老接口:interface ISample : IUnknown{ HRESULT DoSomething(); HRESULT Func();};新接口:interface ISample2 : IUnknown{ // HRESULT DoSomething(); 不需要 // HRESULT Func(); 不需要 HRESULT Func2(); // 新的函数对Func()的升级版本. HRESULT NewFun(); // 一个新的函数.}派生类时要同时派生自这两个接口使用组件时可以通过查询接口查到两个接口。 楼上的你把 // HRESULT DoSomething(); 不需要 // HRESULT Func(); 不需要这两个函数干掉, 还怎么通过, 升级的新接口去调用,DoSomething, Func两个函数?????这个两个函数还是要在接口中声明的, 只是利用老的实现就可以了 楼上的你把 // HRESULT DoSomething(); 不需要 // HRESULT Func(); 不需要这两个函数干掉, 还怎么通过升级的新接口(ISample2)去调用,DoSomething, Func两个函数?????这个两个函数还是要在接口中声明的, 只是利用老的实现就可以了 coclass的CLSID要不要改呢?library的GUID要不要改呢? ODBC操作Mysql奇怪问题! listctl滚动条的问题 如何获得CListView Column上显示的文字? 求<<com技术内幕>>的配书光盘 如何使用RegSaveKey,我怎么保存不了呢 请教一个编译错误的原因和解决办法 谁能帮我, 一位编程爱好者的求救!! 怎样在对话框里加一个FormView??? MFC怎么做一个带图标的菜单 求助:用MFC界面实现感知器算法(VC++6.0) 谁知道VS2005与VS2003及更早的VC6的区别? 已知Bezier曲线,求此线上任一点的切线切线
有些应用比如Dephi还是要重新引用、重新编译才能正常使用组件。
interface ISample : IUnknown
{
HRESULT DoSomething();
HRESULT Func();
};新接口:
interface ISample2 : IUnknown
{
HRESULT DoSomething(); // 不改变这个函数还是使用老的实现.
HRESULT Func(); // 不改变这个函数还是使用老的实现.
HRESULT Func2(); // 新的函数对Func()的升级版本.
HRESULT NewFun(); // 一个新的函数.
}
interface ISample : IUnknown
{
HRESULT DoSomething();
HRESULT Func();
};新接口:
interface ISample2 : IUnknown
{
// HRESULT DoSomething(); 不需要
// HRESULT Func(); 不需要
HRESULT Func2(); // 新的函数对Func()的升级版本.
HRESULT NewFun(); // 一个新的函数.
}派生类时要同时派生自这两个接口使用组件时可以通过查询接口查到两个接口。
// HRESULT DoSomething(); 不需要
// HRESULT Func(); 不需要这两个函数干掉, 还怎么通过, 升级的新接口去调用,DoSomething, Func两个函数?????
这个两个函数还是要在接口中声明的, 只是利用老的实现就可以了
// HRESULT DoSomething(); 不需要
// HRESULT Func(); 不需要这两个函数干掉, 还怎么通过升级的新接口(ISample2)去调用,DoSomething, Func两个函数?????
这个两个函数还是要在接口中声明的, 只是利用老的实现就可以了
library的GUID要不要改呢?