ShowHelp函数失败通知

San*_*ade 7 .net c# chm

我是C#的新手并且正在为实用程序工作以验证帮助文件的主题ID内容.以下功能对我启动帮助文件非常有用:

 Help.ShowHelp(this, HelpFile.Text, HelpNavigator.TopicId, topicIDStr);
Run Code Online (Sandbox Code Playgroud)

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

以下是伪代码示例:

If Help.ShowHelp() failed
{
    Messagebox("Failed to launch help")
}
Run Code Online (Sandbox Code Playgroud)

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

以下内容已经尝试过:

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

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

谢谢阅读.

hel*_*.de 3

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

\n\n

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

\n\n

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

\n\n

在此输入图像描述

\n\n

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

\n\n

因此,当您确实想深入了解这一点时,我会提供一些链接和信息作为起点。但你必须自己根据你的需求编写代码。

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

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