È difficile rispondere perché non abbiamo molte informazioni su come si usa topicIDStr. Avendo formattato i numeri di contextID come mostrato nel mio articolo Creating Context-Sensitive Help for Applications puoi controllare l'intervallo di numeri per codice.
Ma, ancora una volta, è necessario controllare tutti i'topicID 'durante lo sviluppo dell'applicazione e la creazione del file di guida. Molte cose dipendono da come viene chiamato l'aiuto dalla tua applicazione.
Forse sapete, lo scopo dei due file (ALIAS e MAP) è di facilitare il coordinamento tra sviluppatore e autore dell'autore (vedere il collegamento sopra). Il file di mappatura collega un ID al numero della mappa - in genere questo può essere facilmente creato dallo sviluppatore e passato all'autore della guida. Quindi l'autore della guida crea un file alias che collega gli ID ai nomi degli argomenti. Si può controllare questo esternamente con FAR HTML. FAR HTML è una cassetta degli attrezzi piena di varie utilità di authoring, file e HTML.
Si ricorda HTMLHelp è di circa 20 anni e scritto in C++ da Ralph Walden. La classe di supporto .NET (ad esempio VB o C#) è un wrapper per le buone vecchie chiamate API HTMLHelp e una codifica rapida e sporca da parte dei programmatori Microsoft per il codice gestito. Il codice non gestito è la via dell'uomo e una seconda (difficile) soluzione.
Quindi, quando vuoi approfondire questo argomento, darei alcuni collegamenti e informazioni come punto di partenza. Ma devi codificare per le tue esigenze da solo.
How to use the unmanaged HTML Help API from a managed Visual C# application
Connecting HTML Help to C++/MFC Programs (PDF)
Il comando HH_GET_LAST_ERROR si riferisce ad un file mancante Hherror.h che si trova nella seguente Microsoft KB article.
HtmlHelp.Il file h ha un commento con HH_GET_LAST_ERROR che dice "non implementato", tuttavia sembra che sia almeno parzialmente implementato. Se chiamo HtmlHelp (0, PChar (mHelpFile), HH_HELP_CONTEXT, 911); dove 911 è un ContextID non valido, HH_GET_LAST_ERROR ha restituito l'errore 0x8004020A con il testo della descrizione "Il file della guida compilato (.chm) non contiene ID di contesto." Per la maggior parte dei tipi di errore HH_GET_LAST_ERROR sembra restituire 0x80004005 "Errore non specificato".
Come idea solo per favore dare un'occhiata a: LoadLibrary on OCX file fails in Windows 7 x64
Come detto da altri si può verificare per esempio File.Exists e visualizzato nell'esempio di codice seguente per una chiamata 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));
}
}
La classe di Guida incapsula il motore HTML Help 1.0. E penso che l'API sia progettata come invalida e non genererà alcuna eccezione in caso di errore perché è molto improbabile che questa chiamata fallisca. Puoi verificare se il file esiste e puoi verificare se il chm è aperto sull'argomento specificato ... Una volta implementato il file chm è improbabile che venga modificato dall'utente ... quindi c'è un caso che possa andare storto ? – kennyzx
È possibile controllare la presenza di exe? –
quale exe per la precisione? – kennyzx