ShowHelp函数失败通知

我是C#的新手,并且正在为实用程序工作以validation帮助文件的主题ID内容。 以下function对我启动帮助文件很有用:

Help.ShowHelp(this, HelpFile.Text, HelpNavigator.TopicId, topicIDStr); 

如果Help.ShowHelp()函数无法使用提供的CHM文件和主题ID启动.CHM(帮助文件),那么我需要向用户提供有关启动失败的通知。

以下是伪代码示例:

 If Help.ShowHelp() failed { Messagebox("Failed to launch help") } 

我在网上搜索但无法从ShowHelp()中找到函数或返回类型/参数,这将通知showHelp()函数失败。

以下内容已经尝试过:

  • 由于我来自MFC背景,我试图在C#中找到与GetLastError()相关的函数。 因此建议使用getlastwin32error(),但不会在失败情况下提供最后一个错误

  • Help.ShowHelp()的参数或返回类型对查找失败条件没有用。

谢谢阅读。

这很难回答,因为我们没有太多关于您如何使用topicIDStr的信息。 格式化contextID号,如我的文章创建上下文相关的应用程序帮助中所示,您可以按代码检查数字范围。

但同样,您必须在开发应用程序和编写帮助文件时检查所有’topicID’。 许多事情取决于您的应用程序如何调用帮助。

您可能知道,这两个文件(ALIAS和MAP)的目的是简化开发人员和帮助作者之间的协调(参见上面的链接)。 映射文件将ID链接到地图编号 – 通常这可以由开发人员轻松创建并传递给帮助作者。 然后,帮助作者创建一个别名文件,将ID链接到主题名称。 可以通过FAR HTML在外部检查。 FAR HTML是一个充满各种创作,文件和HTML实用程序的工具箱。

在此处输入图像描述

请记住HTMLHelp大约有20年历史,由Ralph Walden用C ++编写。 .NET(例如VB或C#)帮助类是旧的HTMLHelp API调用的包装器,也是Microsoft程序员对托管代码的快速和脏编码。 非托管代码是男人的方式,也是第二个(困难)解决方案。

所以,当你真的想深入研究这个时,我会给出一些链接和信息作为起点。 但是你必须自己编写代码来满足你的需求。

如何使用托管的Visual C#应用程序中的非托管HTML帮助API

将HTML帮助连接到C ++ / MFC程序(PDF)

HH_GET_LAST_ERROR命令引用了一个丢失的文件Hherror.h,可以在以下Microsoft知识库文章中找到它 。

HtmlHelp.h文件有一个HH_GET_LAST_ERROR注释,表示“未实现”但是它似乎至少部分实现了。 如果我调用HtmlHelp(0,PChar(mHelpFile),HH_HELP_CONTEXT,911); 其中911是无效的ContextID,然后HH_GET_LAST_ERROR返回错误0x8004020A,其中包含描述文本“编译的帮助(.chm)文件不包含上下文ID。” 对于大多数类型的错误,HH_GET_LAST_ERROR似乎返回0x80004005“未指定的错误”。

仅作为一个想法,请看看: Windows 7 x64上的OCX文件上的LoadLibrary失败

正如其他人所提到的,您可以检查例如File.Exists并在下面的代码示例中显示Process.Start(...)调用。

 private void button1_Click(object sender, EventArgs e) { string helpFilePath = Application.StartupPath + @"\help-subfolder\C-Sharp-CHM-example.chm"; // Verify if the file exists if (File.Exists(helpFilePath)) { Process.Start(helpFilePath); } else { Console.WriteLine(string.Format("File not found [{0}]", helpFilePath)); } }