delphi - 使用 Helpintfs::IHelpSystem 在 C++Builder 中给出错误“抽象类”
问题描述
我正在使用 C++Builder 并使用示例 Delphi 代码来调用一个名为 eViewer 的新帮助文件系统。当我转换下面的变量 IHelpSystem 的 Delphi 过程时,出现错误:变量类型 'System::Helpintfs::IHelpSystem' 是一个抽象类。错误文本如下。如何在 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' 是一个抽象类
- 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
它是一个抽象类(它具有在派生类中实现的纯虚拟方法),因此您不能直接实例化它,就像您在 C++ 代码中尝试做的那样:
IHelpSystem HelpSystem;
您只能通过指针 ( IHelpSystem*
) 或引用 ( IHelpSystem&
) 来声明这种类型的变量。事实上,C++ 中相当于 Delphi 语句:
var HelpSystem: IHelpSystem;
是:
IHelpSystem* HelpSystem;
但是,由于IHelpSystem
是基于 Delphi 的接口,因此您实际上需要使用_di_IHelpSystem
包装器类型(它是 的别名DelphiInterface<IHelpSystem>
),它是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);
}
推荐阅读
- java - 在 Java 代码中从 SimpleDateFormat 返回 NumberFormatException
- swiftui - 在 SwiftUI 的 List 中获取 CoreData 的索引号
- api - 加载多个 Autodesk Inventor 插件
- angular - 在 mat-select 中选择选项时没有输出
- node.js - 将服务器端的 Fetch 函数导出到客户端 Node.js
- javascript - 内联样式背景图像不显示带有变量的 Reactjs 中的本地图像
- android - 如何从 Firebase 中删除颤动的卡片?
- node.js - Firebase 上的 Node.js 后端应用程序,用于访问 Azure Active Directory 用户
- powershell - 通过递归获取目录大小适用于一个路径而不是其他路径
- python - 创建附加表以支持自定义 Django 模型