使用 Helpintfs::IHelpSystem 在 C++Builder 中给出错误 'abstract class'
using Helpintfs::IHelpSystem gives an error 'abstract class' in C++Builder
我正在使用 C++Builder 并使用样本 Delphi 代码来调用名为 eViewer 的新帮助文件系统。当我在变量 IHelpSystem 下转换 Delphi 过程时出现错误:变量类型 'System::Helpintfs::IHelpSystem' 是一个抽象 class。错误文本如下。如何在 C++Builder 中使用变量 IHelpSystem 和函数 GetHelpSystem?
//Original Delphi
procedure TFrmHelpViewerMain.btnShowTopicClick(Sender: TObject);
var
HelpSystem: IHelpSystem;
begin
GetHelpSystem(HelpSystem);
if assigned(HelpSystem) then
HelpSystem.ShowTopicHelp('topic3', Application.HelpFile);
end;
//My C++Builder code
#include <System.HelpIntfs.hpp>
void __fastcall TForm99::btnShowTopicClick(TObject *Sender)
{
IHelpSystem HelpSystem; //<< Error Here
GetHelpSystem(HelpSystem);
if( Assigned(HelpSystem) ){
HelpSystem->ShowTopicHelp("topic3", Application->HelpFile);
}
}
[bcc64错误]CBtest_Unit1.cpp(97):变量类型'System::Helpintfs::IHelpSystem'是一个抽象class
- unknwn.h(114): 'IHelpSystem'
中未实现的纯虚方法 'QueryInterface'
- unknwn.h(118): 'IHelpSystem'
中未实现的纯虚方法 'AddRef'
- unknwn.h(120): 'IHelpSystem'
中未实现的纯虚方法 'Release'
- System.HelpIntfs.hpp(66): 'IHelpSystem'
中未实现的纯虚方法 'ShowHelp'
- System.HelpIntfs.hpp(67): 'IHelpSystem'
中未实现的纯虚方法 'ShowContextHelp'
- System.HelpIntfs.hpp(68): 'IHelpSystem'
中未实现的纯虚方法 'ShowTableOfContents'
- System.HelpIntfs.hpp(69): 'IHelpSystem'
中未实现的纯虚方法 'ShowTopicHelp'
- System.HelpIntfs.hpp(70): 'IHelpSystem'
中未实现的纯虚方法 'AssignHelpSelector'
- System.HelpIntfs.hpp(71): 'IHelpSystem'
中未实现的纯虚方法 'Hook'
以下是 Embaradero 网站上讨论 IHelpSystem 的帮助页面。
如错误消息所述,IHelpSystem
是一个抽象 class(它具有在派生的 classes 中实现的纯虚方法),因此您不能直接实例化它,就像您在 C++ 代码中尝试做的那样:
IHelpSystem HelpSystem;
您只能通过指针(IHelpSystem*
)或引用(IHelpSystem&
)声明此类型的变量。事实上,Delphi 语句的 C++ 等价物:
var HelpSystem: IHelpSystem;
是:
IHelpSystem* HelpSystem;
但是,由于 IHelpSystem
是基于 Delphi 的接口,您实际上需要使用 _di_IHelpSystem
包装器类型(这是 DelphiInterface<IHelpSystem>
), which is what GetHelpSystem()
实际输出的别名在 C++ 中:
extern DELPHI_PACKAGE bool __fastcall GetHelpSystem(/* out */ _di_IHelpSystem &System)/* overload */;
试试这个:
#include <System.HelpIntfs.hpp>
void __fastcall TForm99::btnShowTopicClick(TObject *Sender)
{
_di_IHelpSystem HelpSystem;
GetHelpSystem(HelpSystem);
if (HelpSystem)
HelpSystem->ShowTopicHelp(_D("topic3"), Application->HelpFile);
}
我正在使用 C++Builder 并使用样本 Delphi 代码来调用名为 eViewer 的新帮助文件系统。当我在变量 IHelpSystem 下转换 Delphi 过程时出现错误:变量类型 'System::Helpintfs::IHelpSystem' 是一个抽象 class。错误文本如下。如何在 C++Builder 中使用变量 IHelpSystem 和函数 GetHelpSystem?
//Original Delphi
procedure TFrmHelpViewerMain.btnShowTopicClick(Sender: TObject);
var
HelpSystem: IHelpSystem;
begin
GetHelpSystem(HelpSystem);
if assigned(HelpSystem) then
HelpSystem.ShowTopicHelp('topic3', Application.HelpFile);
end;
//My C++Builder code
#include <System.HelpIntfs.hpp>
void __fastcall TForm99::btnShowTopicClick(TObject *Sender)
{
IHelpSystem HelpSystem; //<< Error Here
GetHelpSystem(HelpSystem);
if( Assigned(HelpSystem) ){
HelpSystem->ShowTopicHelp("topic3", Application->HelpFile);
}
}
[bcc64错误]CBtest_Unit1.cpp(97):变量类型'System::Helpintfs::IHelpSystem'是一个抽象class
- unknwn.h(114): 'IHelpSystem' 中未实现的纯虚方法 'QueryInterface'
- unknwn.h(118): 'IHelpSystem' 中未实现的纯虚方法 'AddRef'
- unknwn.h(120): 'IHelpSystem' 中未实现的纯虚方法 'Release'
- System.HelpIntfs.hpp(66): 'IHelpSystem' 中未实现的纯虚方法 'ShowHelp'
- System.HelpIntfs.hpp(67): 'IHelpSystem' 中未实现的纯虚方法 'ShowContextHelp'
- System.HelpIntfs.hpp(68): 'IHelpSystem' 中未实现的纯虚方法 'ShowTableOfContents'
- System.HelpIntfs.hpp(69): 'IHelpSystem' 中未实现的纯虚方法 'ShowTopicHelp'
- System.HelpIntfs.hpp(70): 'IHelpSystem' 中未实现的纯虚方法 'AssignHelpSelector'
- System.HelpIntfs.hpp(71): 'IHelpSystem' 中未实现的纯虚方法 'Hook'
以下是 Embaradero 网站上讨论 IHelpSystem 的帮助页面。
如错误消息所述,IHelpSystem
是一个抽象 class(它具有在派生的 classes 中实现的纯虚方法),因此您不能直接实例化它,就像您在 C++ 代码中尝试做的那样:
IHelpSystem HelpSystem;
您只能通过指针(IHelpSystem*
)或引用(IHelpSystem&
)声明此类型的变量。事实上,Delphi 语句的 C++ 等价物:
var HelpSystem: IHelpSystem;
是:
IHelpSystem* HelpSystem;
但是,由于 IHelpSystem
是基于 Delphi 的接口,您实际上需要使用 _di_IHelpSystem
包装器类型(这是 DelphiInterface<IHelpSystem>
), which is what GetHelpSystem()
实际输出的别名在 C++ 中:
extern DELPHI_PACKAGE bool __fastcall GetHelpSystem(/* out */ _di_IHelpSystem &System)/* overload */;
试试这个:
#include <System.HelpIntfs.hpp>
void __fastcall TForm99::btnShowTopicClick(TObject *Sender)
{
_di_IHelpSystem HelpSystem;
GetHelpSystem(HelpSystem);
if (HelpSystem)
HelpSystem->ShowTopicHelp(_D("topic3"), Application->HelpFile);
}