Comment imprimer la sortie dans la fenêtre de commande pour les applications GUI compilées avec -ldflags -H=windowsgui
Compilation d'une application Go avec -ldflags - H=windowsgui destiné à être utilisé comme interface utilisateur graphique (GUI) peut présenter des défis lors de l'impression de la sortie vers la fenêtre de commande. En effet, les processus GUI sous Windows ne sont généralement pas associés à une console.
Problème
Lorsqu'une application est compilée avec l'indicateur -H=windowsgui, les tentatives d'impression la sortie à l'aide de méthodes standard telles que println ou fmt.Println n'entraîne aucun affichage dans la commande window.
Solution
Pour imprimer la sortie dans ce scénario, vous devez attacher explicitement le processus à la console de son processus parent. Ceci peut être réalisé à l'aide de la fonction API AttachConsole, qui est accessible via le package syscall :
package main import ( "fmt" "syscall" ) const ( ATTACH_PARENT_PROCESS = ^uint32(0) // (DWORD)-1 ) var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procAttachConsole = modkernel32.NewProc("AttachConsole") ) func AttachConsole(dwParentProcess uint32) (ok bool) { r0, _, _ := syscall.Syscall(procAttachConsole.Addr(), 1, uintptr(dwParentProcess), 0, 0) ok = bool(r0 != 0) return } func main() { ok := AttachConsole(ATTACH_PARENT_PROCESS) if ok { fmt.Println("Okay, attached") } }
Appelez AttachConsole(ATTACH_PARENT_PROCESS) avant de tenter d'imprimer la sortie, qui connectera le processus à la console parent. Après cette étape, vous pouvez utiliser les méthodes d'impression standard comme d'habitude.
Options supplémentaires
Si AttachConsole échoue, vous pouvez envisager ces alternatives :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!