2016-06-06 8 views
7

Sono novizio in C# e lavoro per l'utilità per verificare il contenuto dell'ID argomento dei file della guida. seguente funzione è utile per me per lanciare file di aiuto:Funzione ShowHelp notifica fallita

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

In caso Help.ShowHelp() la funzione non è riuscito a lanciare CHM (file della Guida) con il file CHM fornito e argomento id, quindi ho bisogno di fornire la notifica all'utente circa il fallimento del lancio.

seguito è esempio di codice pseudo:

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

faccio una ricerca su web, ma incapace di trovare la funzione o restituire tipo/Parametri da ShowHelp(), che comunicherà il fallimento della funzione showHelp().

Seguendo le cose stanno già provato:

  • Dato che io sono da MFC sfondo ho cercato di trovare la funzione relativa a GetLastError() in C#. Di conseguenza, viene suggerito getlastwin32error() ma non fornisce l'ultimo errore in condizione di errore

  • parametro o il tipo di ritorno di Help.ShowHelp() non è utile per trovare la condizione di errore.

Grazie per la lettura.

+0

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

+0

È possibile controllare la presenza di exe? –

+0

quale exe per la precisione? – kennyzx

risposta

3

È 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.

enter image description here

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)); 
    } 
}