被一个com搞的晕头转向。。。。
有一个com是dll文件,注册,使用,都没问题,但是我用到其中一个函数的时候,始终无法运行。
dll文件,通过“Component”--"Import Component"方式导入,所以自动生成了xxxx_TLB.h和xxxx_TLB.cpp
在xxxx_TLB.h中,有这样一个函数和接口:
然后我创建一个窗体,在窗体的头文件 Form1.hpp中,我改写了窗口类的派生关系
将
改为
接着我重写了“IProgress ”接口中的“ProgressCallback”函数
然后我调用这个函数:
运行结果“Pure virtual function called”。。。。。
我尝试了一些修改
第一种,把重写的函数类改为基类,如下:
第二种
改为
两种都不行。。其实这个代码是照着DEMO中,DELPHI的例子来的,DELPHI运行完全没有问题。。。
搞了一天了,不行了,大家帮忙看看。。。
dll文件,通过“Component”--"Import Component"方式导入,所以自动生成了xxxx_TLB.h和xxxx_TLB.cpp
在xxxx_TLB.h中,有这样一个函数和接口:
//这是我要调用的函数,这个函数的最后一个参数,就是我出问题的地方,它需要下面那个接口的指针
HRESULT __fastcall EncodeFile(BSTR FileName/*[in]*/, BSTR
OutputFileName/*[in]*/,
BSTR Parameters/*[in]*/,
unsigned ResampleSampleRate/*[in]*/,
unsigned Channels/*[in]*/,
double StartPosition/*[in]*/,
double Length/*[in]*/,
double Normalize/*[in]*/,
Bassencoder_tlb::IProgress* ProgressCallback/*[in]*/);
//这是接口
// *********************************************************************//
// Interface: IProgress
// Flags: (4352) OleAutomation Dispatchable
// GUID: {C23CF58D-3121-45D2-A0DB-B19F98350D52}
// *********************************************************************//
interface IProgress : public IDispatch
{
public:
HRESULT STDMETHODCALLTYPE ProgressCallback(double Progress/*[in]*/); // [201]
};
然后我创建一个窗体,在窗体的头文件 Form1.hpp中,我改写了窗口类的派生关系
将
“class TFormMain : public TForm” 改为
“class TFormMain : public TForm ,public IProgress”接着我重写了“IProgress ”接口中的“ProgressCallback”函数
HRESULT STDMETHODCALLTYPE TFormMain::ProgressCallback(double Progress)
{
pb1->Position=(int)(Progress);
return S_OK;
}
然后我调用这个函数:
EncodeFile(.............(IProgress*)this);运行结果“Pure virtual function called”。。。。。
我尝试了一些修改
第一种,把重写的函数类改为基类,如下:
HRESULT STDMETHODCALLTYPE IProgress::ProgressCallback(double Progress)
{
//pb1->Position=(int)(Progress);
return S_OK;
}
第二种
EncodeFile(.............(IProgress*)this);改为
EncodeFile(.............this);两种都不行。。其实这个代码是照着DEMO中,DELPHI的例子来的,DELPHI运行完全没有问题。。。
搞了一天了,不行了,大家帮忙看看。。。
...全文
相关推荐
晕头转向的鸟flash动画
晕头转向的鸟flash动画是一款一群晕头转向的卡通小鸟动画素材下载。
COM组件与DLL的深度对比:为什么AutoCAD等大型软件选择COM?
本文探讨了大型软件(如AutoCAD)偏好使用COM组件而非普通DLL的原因。首先分析了DLL的局限性,包括二进制兼容性问题、缺乏组织性、进程隔离困难等。随后阐述了COM的七大优势:接口化组织、易于升级维护、高安全性、进程间调用、分布式能力、面向对象特性和生态支持。文章还梳理了OLE、ActiveX与COM的关系,指出COM是底层核心协议。最后以AutoCAD为例,说明COM在多语言支持、稳定性隔离和版本兼容方面的优势。尽管现代技术发展迅速,但COM所体现的组件化思想仍具有深远影响。
坐在椅子上晕头转向的3d小人素材PPT模板
坐在椅子上晕头转向的3d小人PPT模板素材,关键词:椅子,3d小人图片,晕头转向,PPT小人素材,小人商务图片,PPTX格式; 坐在椅子上晕头转向的3d小人PPT模板素材,关键词:椅子,3d小人图片,晕头转向,PPT小人素材,小人商务图片,PPTX格式;转载请注明出处
一个低级的搞人程序
在桌面创建无数个文件,过一段时间,自动删除
坐在椅子上晕头转向的3d小人PPT模板素材.rar
坐在椅子上晕头转向的3d小人PPT模板素材,关键词:椅子,3d小人图片,晕头转向,PPT小人素材,小人商务图片,PPTX格式;


ActiveX/COM/DCOM

